Skip to content

Commit 9e50602

Browse files
Added optional primitive types.
1 parent 18950e9 commit 9e50602

File tree

2 files changed

+69
-0
lines changed

2 files changed

+69
-0
lines changed

include/nstd/core/optional.h

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#ifndef NSTD_CORE_OPTIONAL_H
22
#define NSTD_CORE_OPTIONAL_H
3+
#include "../nstd.h"
34

45
/// Describes an `NSTDOptional` variant.
56
typedef enum {
@@ -15,4 +16,41 @@ typedef enum {
1516
union { T some; };\
1617
}
1718

19+
/// Represents an optional value of type `NSTDBool`.
20+
NSTDOptional(NSTDBool) NSTDOptionalBool;
21+
/// Represents an optional value of type `NSTDChar`.
22+
NSTDOptional(NSTDChar) NSTDOptionalChar;
23+
/// Represents an optional value of type `NSTDChar8`.
24+
NSTDOptional(NSTDChar8) NSTDOptionalChar8;
25+
/// Represents an optional value of type `NSTDChar16`.
26+
NSTDOptional(NSTDChar16) NSTDOptionalChar16;
27+
/// Represents an optional value of type `NSTDChar32`.
28+
NSTDOptional(NSTDChar32) NSTDOptionalChar32;
29+
/// Represents an optional value of type `NSTDUnichar`.
30+
NSTDOptional(NSTDUnichar) NSTDOptionalUnichar;
31+
/// Represents an optional value of type `NSTDFloat32`.
32+
NSTDOptional(NSTDFloat32) NSTDOptionalFloat32;
33+
/// Represents an optional value of type `NSTDFloat64`.
34+
NSTDOptional(NSTDFloat64) NSTDOptionalFloat64;
35+
/// Represents an optional value of type `NSTDInt`.
36+
NSTDOptional(NSTDInt) NSTDOptionalInt;
37+
/// Represents an optional value of type `NSTDUInt`.
38+
NSTDOptional(NSTDUInt) NSTDOptionalUInt;
39+
/// Represents an optional value of type `NSTDInt8`.
40+
NSTDOptional(NSTDInt8) NSTDOptionalInt8;
41+
/// Represents an optional value of type `NSTDUInt8`.
42+
NSTDOptional(NSTDUInt8) NSTDOptionalUInt8;
43+
/// Represents an optional value of type `NSTDInt16`.
44+
NSTDOptional(NSTDInt16) NSTDOptionalInt16;
45+
/// Represents an optional value of type `NSTDUInt16`.
46+
NSTDOptional(NSTDUInt16) NSTDOptionalUInt16;
47+
/// Represents an optional value of type `NSTDInt32`.
48+
NSTDOptional(NSTDInt32) NSTDOptionalInt32;
49+
/// Represents an optional value of type `NSTDUInt32`.
50+
NSTDOptional(NSTDUInt32) NSTDOptionalUInt32;
51+
/// Represents an optional value of type `NSTDInt64`.
52+
NSTDOptional(NSTDInt64) NSTDOptionalInt64;
53+
/// Represents an optional value of type `NSTDUInt64`.
54+
NSTDOptional(NSTDUInt64) NSTDOptionalUInt64;
55+
1856
#endif

src/core/optional.rs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
//! Represents an optional (possibly uninitialized) value.
2+
use crate::{
3+
NSTDBool, NSTDChar, NSTDChar16, NSTDChar32, NSTDChar8, NSTDFloat32, NSTDFloat64, NSTDInt,
4+
NSTDInt16, NSTDInt32, NSTDInt64, NSTDInt8, NSTDUInt, NSTDUInt16, NSTDUInt32, NSTDUInt64,
5+
NSTDUInt8, NSTDUnichar,
6+
};
27

38
/// Describes an `NSTDOptional` variant.
49
#[repr(C)]
@@ -18,3 +23,29 @@ pub enum NSTDOptional<T> {
1823
/// The initialized variant.
1924
Some(T),
2025
}
26+
27+
/// Generates optional primitive structures.
28+
macro_rules! gen_optional {
29+
($name: ident, $T: ty) => {
30+
#[doc = concat!("Represents an optional value of type `", stringify!($T), "`.")]
31+
pub type $name = NSTDOptional<$T>;
32+
};
33+
}
34+
gen_optional!(NSTDOptionalBool, NSTDBool);
35+
gen_optional!(NSTDOptionalChar, NSTDChar);
36+
gen_optional!(NSTDOptionalChar8, NSTDChar8);
37+
gen_optional!(NSTDOptionalChar16, NSTDChar16);
38+
gen_optional!(NSTDOptionalChar32, NSTDChar32);
39+
gen_optional!(NSTDOptionalUnichar, NSTDUnichar);
40+
gen_optional!(NSTDOptionalFloat32, NSTDFloat32);
41+
gen_optional!(NSTDOptionalFloat64, NSTDFloat64);
42+
gen_optional!(NSTDOptionalInt, NSTDInt);
43+
gen_optional!(NSTDOptionalUInt, NSTDUInt);
44+
gen_optional!(NSTDOptionalInt8, NSTDInt8);
45+
gen_optional!(NSTDOptionalUInt8, NSTDUInt8);
46+
gen_optional!(NSTDOptionalInt16, NSTDInt16);
47+
gen_optional!(NSTDOptionalUInt16, NSTDUInt16);
48+
gen_optional!(NSTDOptionalInt32, NSTDInt32);
49+
gen_optional!(NSTDOptionalUInt32, NSTDUInt32);
50+
gen_optional!(NSTDOptionalInt64, NSTDInt64);
51+
gen_optional!(NSTDOptionalUInt64, NSTDUInt64);

0 commit comments

Comments
 (0)