ZXFoundation™ 26h2
Loading...
Searching...
No Matches
types.cxxm
Go to the documentation of this file.
1/// SPDX-License-Identifier: Apache 2.0
2/// @file types.cxxm
3/// @brief foundational types
4
5export module zxfoundation.base.types;
6#ifdef ZX_NO_BITINT
7import std;
8#endif
9
10export {
11 // ZXFoundation types
12
13 using i8 = __INT8_TYPE__;
14 using u8 = __UINT8_TYPE__;
15
16 using i16 = __INT16_TYPE__;
17 using u16 = __UINT16_TYPE__;
18
19 using i32 = __INT32_TYPE__;
20 using u32 = __UINT32_TYPE__;
21 using wint = __WINT_TYPE__;
22
23 using i64 = __INT64_TYPE__;
24 using u64 = __UINT64_TYPE__;
25
26 using i128 = __int128_t;
27 using u128 = __uint128_t;
28 using complex = __complex__ double;
29
30#ifndef ZX_NO_COMP_FLOAT
31 using f32 = _Float32;
32 using f32x = _Float32x;
33 using f64 = _Float64;
34 using f64x = _Float64x;
35 using f128 = _Float128;
36#else
37 using f32 = float;
38 using f32x = double;
39 using f64 = double;
40 using f64x = long double;
41 using f128 = long double;
42#endif
43
44 using cstr = decltype("");
45 using char8 = char8_t;
46 using char16 = __CHAR16_TYPE__;
47 using char32 = __CHAR32_TYPE__;
48 using wchar = __WCHAR_TYPE__;
49 using uchar = unsigned char;
50
51 using i8least = __INT_LEAST8_TYPE__;
52 using i16least = __INT_LEAST16_TYPE__;
53 using i32least = __INT_LEAST32_TYPE__;
54 using i64least = __INT_LEAST64_TYPE__;
55
56 using i8fast = __INT_FAST8_TYPE__;
57 using i16fast = __INT_FAST16_TYPE__;
58 using i32fast = __INT_FAST32_TYPE__;
59 using i64fast = __INT_FAST64_TYPE__;
60
61 using u8least = __UINT_LEAST8_TYPE__;
62 using u16least = __UINT_LEAST16_TYPE__;
63 using u32least = __UINT_LEAST32_TYPE__;
64 using u64least = __UINT_LEAST64_TYPE__;
65
66 using u8fast = __UINT_FAST8_TYPE__;
67 using u16fast = __UINT_FAST16_TYPE__;
68 using u32fast = __UINT_FAST32_TYPE__;
69 using u64fast = __UINT_FAST64_TYPE__;
70
71 using imax = __INTMAX_TYPE__;
72 using umax = __UINTMAX_TYPE__;
73
74 using usize = __SIZE_TYPE__;
75 using isize = __PTRDIFF_TYPE__;
76 using ptrdiff = __PTRDIFF_TYPE__;
77
78 using uptr = __UINTPTR_TYPE__;
79 using iptr = __INTPTR_TYPE__;
80
81#ifndef ZX_NO_BITINT
82 template<u16 N>
83 using bit_int = _BitInt(N);
84
85 template<u16 N>
86 using ubit_int = unsigned _BitInt(N);
87#else
88 template<u16 N>
89 using bit_int =
90 std::conditional_t<
91 N <= 8, i8,
92 std::conditional_t<
93 N <= 16, i16,
94 std::conditional_t<
95 N <= 32, i32,
96 std::conditional_t<
97 N <= 64, i64,
98 i128
99 >
100 >
101 >
102 >;
103
104 template<u16 N>
105 using ubit_int =
106 std::conditional_t<
107 N <= 8, u8,
108 std::conditional_t<
109 N <= 16, u16,
110 std::conditional_t<
111 N <= 32, u32,
112 std::conditional_t<
113 N <= 64, u64,
114 u128
115 >
116 >
117 >
118 >;
119#endif
120
121 // unethical/fun types
122
123 using i2 = bit_int<2>;
124 using u2 = ubit_int<2>;
125
126 using i4 = bit_int<4>;
127 using u4 = ubit_int<4>;
128
129 using i256 = bit_int<256>;
130 using u256 = ubit_int<256>;
131
132 using i512 = bit_int<512>;
133 using u512 = ubit_int<512>;
134
135 using i1024 = bit_int<1024>;
136 using u1024 = ubit_int<1024>;
137
138 using i2048 = bit_int<2048>;
139 using u2048 = ubit_int<2048>;
140
141 using i4096 = bit_int<4096>;
142 using u4096 = ubit_int<4096>;
143
144 // misc.
145
146 using condition_code = i32;
147
148 inline constexpr u32 PAGE_SHIFT = 12U;
149 inline constexpr u64 PAGE_SIZE = 1ULL << PAGE_SHIFT;
150 inline constexpr u64 PAGE_MASK = ~(PAGE_SIZE - 1ULL);
151
152 /// @brief Page-frame number (physical address >> PAGE_SHIFT).
153 using pfn_t = u64;
154
155 template<typename Derived, usize Size>
156 struct FixedSizeBase {
157 virtual ~FixedSizeBase() {
158 static_assert(sizeof(Derived) == Size, "FixedSizeBase: size does not match");
159 }
160 };
161
162 using uuid_t = uchar[16];
163
164 using nullptr_t = decltype(nullptr);
165
166} // end export