1 /** 2 * D header file for C99. 3 * 4 * $(C_HEADER_DESCRIPTION pubs.opengroup.org/onlinepubs/009695399/basedefs/_stdint.h.html, _stdint.h) 5 * 6 * Copyright: Copyright Sean Kelly 2005 - 2018 7 * License: Distributed under the 8 * $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0). 9 * (See accompanying file LICENSE) 10 * Authors: Sean Kelly 11 * Source: $(DRUNTIMESRC core/stdc/_stdint.d) 12 * Standards: ISO/IEC 9899:1999 (E) 13 */ 14 15 module core.stdc.stdint; 16 17 import core.stdc.config; 18 import core.stdc.stddef; // for wchar_t 19 import core.stdc.signal; // for sig_atomic_t 20 import core.stdc.wchar_; // for wint_t 21 22 version (OSX) 23 version = Darwin; 24 else version (iOS) 25 version = Darwin; 26 else version (TVOS) 27 version = Darwin; 28 else version (WatchOS) 29 version = Darwin; 30 31 // Can't be `private` because of @@@BUG11173@@@. _typify(T)32T _typify(T)(T val) @safe pure nothrow { return val; } 33 34 extern (C): 35 @trusted: // Types and constants only. 36 nothrow: 37 @nogc: 38 39 40 static if (is(ucent)) 41 { 42 alias int128_t = cent; /// 43 alias uint128_t = ucent; /// 44 } 45 version(Windows)46version (Windows) 47 { 48 alias int8_t = byte; /// 49 alias int16_t = short; /// 50 alias uint8_t = ubyte; /// 51 alias uint16_t = ushort; /// 52 version (CRuntime_DigitalMars) 53 { 54 alias int32_t = cpp_long; /// 55 alias uint32_t = cpp_ulong; /// 56 } 57 else 58 { 59 alias int32_t = int; /// 60 alias uint32_t = uint; /// 61 } 62 alias int64_t = long; /// 63 alias uint64_t = ulong; /// 64 65 alias int_least8_t = byte; /// 66 alias uint_least8_t = ubyte; /// 67 alias int_least16_t = short; /// 68 alias uint_least16_t = ushort; /// 69 alias int_least32_t = int32_t; /// 70 alias uint_least32_t = uint32_t; /// 71 alias int_least64_t = long; /// 72 alias uint_least64_t = ulong; /// 73 74 alias int_fast8_t = byte; /// 75 alias uint_fast8_t = ubyte; /// 76 alias int_fast16_t = int; /// 77 alias uint_fast16_t = uint; /// 78 alias int_fast32_t = int32_t; /// 79 alias uint_fast32_t = uint32_t; /// 80 alias int_fast64_t = long; /// 81 alias uint_fast64_t = ulong; /// 82 83 alias intptr_t = ptrdiff_t; /// 84 alias uintptr_t = size_t; /// 85 alias intmax_t = long; /// 86 alias uintmax_t = ulong; /// 87 } version(Darwin)88else version (Darwin) 89 { 90 alias int8_t = byte; /// 91 alias int16_t = short; /// 92 alias uint8_t = ubyte; /// 93 alias uint16_t = ushort; /// 94 alias int32_t = int; /// 95 alias uint32_t = uint; /// 96 alias int64_t = cpp_longlong; /// 97 alias uint64_t = cpp_ulonglong; /// 98 99 alias int_least8_t = byte; /// 100 alias uint_least8_t = ubyte; /// 101 alias int_least16_t = short; /// 102 alias uint_least16_t = ushort; /// 103 alias int_least32_t = int; /// 104 alias uint_least32_t = uint; /// 105 alias int_least64_t = int64_t; /// 106 alias uint_least64_t = uint64_t; /// 107 108 alias int_fast8_t = byte; /// 109 alias uint_fast8_t = ubyte; /// 110 alias int_fast16_t = short; /// 111 alias uint_fast16_t = ushort; /// 112 alias int_fast32_t = int; /// 113 alias uint_fast32_t = uint; /// 114 alias int_fast64_t = int64_t; /// 115 alias uint_fast64_t = uint64_t; /// 116 117 alias intptr_t = cpp_long; /// 118 alias uintptr_t = cpp_ulong; /// 119 alias intmax_t = long; /// 120 alias uintmax_t = ulong; /// 121 } version(Posix)122else version (Posix) 123 { 124 alias int8_t = byte; /// 125 alias int16_t = short; /// 126 alias uint8_t = ubyte; /// 127 alias uint16_t = ushort; /// 128 alias int32_t = int; /// 129 alias uint32_t = uint; /// 130 alias int64_t = long; /// 131 alias uint64_t = ulong; /// 132 133 alias int_least8_t = byte; /// 134 alias uint_least8_t = ubyte; /// 135 alias int_least16_t = short; /// 136 alias uint_least16_t = ushort; /// 137 alias int_least32_t = int; /// 138 alias uint_least32_t = uint; /// 139 alias int_least64_t = long; /// 140 alias uint_least64_t = ulong; /// 141 142 version (FreeBSD) 143 { 144 alias int_fast8_t = int; /// 145 alias uint_fast8_t = uint; /// 146 alias int_fast16_t = int; /// 147 alias uint_fast16_t = uint; /// 148 alias int_fast32_t = int; /// 149 alias uint_fast32_t = uint; /// 150 } 151 else version (CRuntime_Musl) 152 { 153 alias int_fast8_t = byte; /// 154 alias uint_fast8_t = ubyte; /// 155 alias int_fast16_t = int; /// 156 alias uint_fast16_t = uint; /// 157 alias int_fast32_t = int; /// 158 alias uint_fast32_t = uint; /// 159 } 160 else 161 { 162 alias int_fast8_t = byte; /// 163 alias uint_fast8_t = ubyte; /// 164 alias int_fast16_t = ptrdiff_t; /// 165 alias uint_fast16_t = size_t; /// 166 alias int_fast32_t = ptrdiff_t; /// 167 alias uint_fast32_t = size_t; /// 168 } 169 alias int_fast64_t = long; /// 170 alias uint_fast64_t = ulong; /// 171 172 alias intptr_t = ptrdiff_t; /// 173 alias uintptr_t = size_t; /// 174 alias intmax_t = long; /// 175 alias uintmax_t = ulong; /// 176 } 177 else 178 { 179 static assert(0); 180 } 181 182 183 184 /// 185 enum int8_t INT8_MIN = int8_t.min; 186 /// 187 enum int8_t INT8_MAX = int8_t.max; 188 /// 189 enum int16_t INT16_MIN = int16_t.min; 190 /// 191 enum int16_t INT16_MAX = int16_t.max; 192 /// 193 enum int32_t INT32_MIN = int32_t.min; 194 /// 195 enum int32_t INT32_MAX = int32_t.max; 196 /// 197 enum int64_t INT64_MIN = int64_t.min; 198 /// 199 enum int64_t INT64_MAX = int64_t.max; 200 201 /// 202 enum uint8_t UINT8_MAX = uint8_t.max; 203 /// 204 enum uint16_t UINT16_MAX = uint16_t.max; 205 /// 206 enum uint32_t UINT32_MAX = uint32_t.max; 207 /// 208 enum uint64_t UINT64_MAX = uint64_t.max; 209 210 /// 211 enum int_least8_t INT_LEAST8_MIN = int_least8_t.min; 212 /// 213 enum int_least8_t INT_LEAST8_MAX = int_least8_t.max; 214 /// 215 enum int_least16_t INT_LEAST16_MIN = int_least16_t.min; 216 /// 217 enum int_least16_t INT_LEAST16_MAX = int_least16_t.max; 218 /// 219 enum int_least32_t INT_LEAST32_MIN = int_least32_t.min; 220 /// 221 enum int_least32_t INT_LEAST32_MAX = int_least32_t.max; 222 /// 223 enum int_least64_t INT_LEAST64_MIN = int_least64_t.min; 224 /// 225 enum int_least64_t INT_LEAST64_MAX = int_least64_t.max; 226 227 /// 228 enum uint_least8_t UINT_LEAST8_MAX = uint_least8_t.max; 229 /// 230 enum uint_least16_t UINT_LEAST16_MAX = uint_least16_t.max; 231 /// 232 enum uint_least32_t UINT_LEAST32_MAX = uint_least32_t.max; 233 /// 234 enum uint_least64_t UINT_LEAST64_MAX = uint_least64_t.max; 235 236 /// 237 enum int_fast8_t INT_FAST8_MIN = int_fast8_t.min; 238 /// 239 enum int_fast8_t INT_FAST8_MAX = int_fast8_t.max; 240 /// 241 enum int_fast16_t INT_FAST16_MIN = int_fast16_t.min; 242 /// 243 enum int_fast16_t INT_FAST16_MAX = int_fast16_t.max; 244 /// 245 enum int_fast32_t INT_FAST32_MIN = int_fast32_t.min; 246 /// 247 enum int_fast32_t INT_FAST32_MAX = int_fast32_t.max; 248 /// 249 enum int_fast64_t INT_FAST64_MIN = int_fast64_t.min; 250 /// 251 enum int_fast64_t INT_FAST64_MAX = int_fast64_t.max; 252 253 /// 254 enum uint_fast8_t UINT_FAST8_MAX = uint_fast8_t.max; 255 /// 256 enum uint_fast16_t UINT_FAST16_MAX = uint_fast16_t.max; 257 /// 258 enum uint_fast32_t UINT_FAST32_MAX = uint_fast32_t.max; 259 /// 260 enum uint_fast64_t UINT_FAST64_MAX = uint_fast64_t.max; 261 262 /// 263 enum intptr_t INTPTR_MIN = intptr_t.min; 264 /// 265 enum intptr_t INTPTR_MAX = intptr_t.max; 266 267 /// 268 enum uintptr_t UINTPTR_MIN = uintptr_t.min; 269 /// 270 enum uintptr_t UINTPTR_MAX = uintptr_t.max; 271 272 /// 273 enum intmax_t INTMAX_MIN = intmax_t.min; 274 /// 275 enum intmax_t INTMAX_MAX = intmax_t.max; 276 277 /// 278 enum uintmax_t UINTMAX_MAX = uintmax_t.max; 279 280 /// 281 enum ptrdiff_t PTRDIFF_MIN = ptrdiff_t.min; 282 /// 283 enum ptrdiff_t PTRDIFF_MAX = ptrdiff_t.max; 284 285 /// 286 enum sig_atomic_t SIG_ATOMIC_MIN = sig_atomic_t.min; 287 /// 288 enum sig_atomic_t SIG_ATOMIC_MAX = sig_atomic_t.max; 289 290 /// 291 enum size_t SIZE_MAX = size_t.max; 292 293 /// 294 enum wchar_t WCHAR_MIN = wchar_t.min; 295 /// 296 enum wchar_t WCHAR_MAX = wchar_t.max; 297 298 /// 299 enum wint_t WINT_MIN = wint_t.min; 300 /// 301 enum wint_t WINT_MAX = wint_t.max; 302 303 /// 304 alias INT8_C = _typify!int8_t ; 305 /// 306 alias INT16_C = _typify!int16_t; 307 /// 308 alias INT32_C = _typify!int32_t; 309 /// 310 alias INT64_C = _typify!int64_t; 311 312 /// 313 alias UINT8_C = _typify!uint8_t ; 314 /// 315 alias UINT16_C = _typify!uint16_t; 316 /// 317 alias UINT32_C = _typify!uint32_t; 318 /// 319 alias UINT64_C = _typify!uint64_t; 320 321 /// 322 alias INTMAX_C = _typify!intmax_t ; 323 /// 324 alias UINTMAX_C = _typify!uintmax_t; 325