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 15module core.stdc.stdint; 16 17import core.stdc.config; 18import core.stdc.stddef; // for wchar_t 19import core.stdc.signal; // for sig_atomic_t 20import core.stdc.wchar_; // for wint_t 21 22version (OSX) 23 version = Darwin; 24else version (iOS) 25 version = Darwin; 26else version (TVOS) 27 version = Darwin; 28else version (WatchOS) 29 version = Darwin; 30 31// Can't be `private` because of @@@BUG11173@@@. 32T _typify(T)(T val) @safe pure nothrow { return val; } 33 34extern (C): 35@trusted: // Types and constants only. 36nothrow: 37@nogc: 38 39 40static if (is(ucent)) 41{ 42 alias int128_t = cent; /// 43 alias uint128_t = ucent; /// 44} 45 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 version (MinGW) 77 { 78 alias int_fast16_t = short; /// 79 alias uint_fast16_t = ushort; /// 80 } 81 else 82 { 83 alias int_fast16_t = int; /// 84 alias uint_fast16_t = uint; /// 85 } 86 alias int_fast32_t = int32_t; /// 87 alias uint_fast32_t = uint32_t; /// 88 alias int_fast64_t = long; /// 89 alias uint_fast64_t = ulong; /// 90 91 alias intptr_t = ptrdiff_t; /// 92 alias uintptr_t = size_t; /// 93 alias intmax_t = long; /// 94 alias uintmax_t = ulong; /// 95} 96else version (Darwin) 97{ 98 alias int8_t = byte; /// 99 alias int16_t = short; /// 100 alias uint8_t = ubyte; /// 101 alias uint16_t = ushort; /// 102 alias int32_t = int; /// 103 alias uint32_t = uint; /// 104 alias int64_t = cpp_longlong; /// 105 alias uint64_t = cpp_ulonglong; /// 106 107 alias int_least8_t = byte; /// 108 alias uint_least8_t = ubyte; /// 109 alias int_least16_t = short; /// 110 alias uint_least16_t = ushort; /// 111 alias int_least32_t = int; /// 112 alias uint_least32_t = uint; /// 113 alias int_least64_t = int64_t; /// 114 alias uint_least64_t = uint64_t; /// 115 116 alias int_fast8_t = byte; /// 117 alias uint_fast8_t = ubyte; /// 118 alias int_fast16_t = short; /// 119 alias uint_fast16_t = ushort; /// 120 alias int_fast32_t = int; /// 121 alias uint_fast32_t = uint; /// 122 alias int_fast64_t = int64_t; /// 123 alias uint_fast64_t = uint64_t; /// 124 125 alias intptr_t = cpp_long; /// 126 alias uintptr_t = cpp_ulong; /// 127 alias intmax_t = long; /// 128 alias uintmax_t = ulong; /// 129} 130else version (linux) 131{ 132 alias int8_t = byte; /// 133 alias int16_t = short; /// 134 alias uint8_t = ubyte; /// 135 alias uint16_t = ushort; /// 136 alias int32_t = int; /// 137 alias uint32_t = uint; /// 138 alias int64_t = long; /// 139 alias uint64_t = ulong; /// 140 141 alias int_least8_t = byte; /// 142 alias uint_least8_t = ubyte; /// 143 alias int_least16_t = short; /// 144 alias uint_least16_t = ushort; /// 145 alias int_least32_t = int; /// 146 alias uint_least32_t = uint; /// 147 alias int_least64_t = long; /// 148 alias uint_least64_t = ulong; /// 149 150 version (CRuntime_Musl) 151 { 152 alias int_fast8_t = byte; /// 153 alias uint_fast8_t = ubyte; /// 154 alias int_fast16_t = int; /// 155 alias uint_fast16_t = uint; /// 156 alias int_fast32_t = int; /// 157 alias uint_fast32_t = uint; /// 158 } 159 else 160 { 161 alias int_fast8_t = byte; /// 162 alias uint_fast8_t = ubyte; /// 163 alias int_fast16_t = ptrdiff_t; /// 164 alias uint_fast16_t = size_t; /// 165 alias int_fast32_t = ptrdiff_t; /// 166 alias uint_fast32_t = size_t; /// 167 } 168 alias int_fast64_t = long; /// 169 alias uint_fast64_t = ulong; /// 170 171 alias intptr_t = ptrdiff_t; /// 172 alias uintptr_t = size_t; /// 173 alias intmax_t = long; /// 174 alias uintmax_t = ulong; /// 175} 176else version (CRuntime_Glibc) 177{ 178 alias int8_t = byte; /// 179 alias int16_t = short; /// 180 alias uint8_t = ubyte; /// 181 alias uint16_t = ushort; /// 182 alias int32_t = int; /// 183 alias uint32_t = uint; /// 184 alias int64_t = long; /// 185 alias uint64_t = ulong; /// 186 187 alias int_least8_t = byte; /// 188 alias uint_least8_t = ubyte; /// 189 alias int_least16_t = short; /// 190 alias uint_least16_t = ushort; /// 191 alias int_least32_t = int; /// 192 alias uint_least32_t = uint; /// 193 alias int_least64_t = long; /// 194 alias uint_least64_t = ulong; /// 195 196 alias int_fast8_t = byte; /// 197 alias uint_fast8_t = ubyte; /// 198 alias int_fast16_t = ptrdiff_t; /// 199 alias uint_fast16_t = size_t; /// 200 alias int_fast32_t = ptrdiff_t; /// 201 alias uint_fast32_t = size_t; /// 202 alias int_fast64_t = long; /// 203 alias uint_fast64_t = ulong; /// 204 205 alias intptr_t = ptrdiff_t; /// 206 alias uintptr_t = size_t; /// 207 alias intmax_t = long; /// 208 alias uintmax_t = ulong; /// 209} 210else version (DragonFlyBSD) 211{ 212 alias int8_t = byte; /// 213 alias int16_t = short; /// 214 alias uint8_t = ubyte; /// 215 alias uint16_t = ushort; /// 216 alias int32_t = int; /// 217 alias uint32_t = uint; /// 218 alias int64_t = long; /// 219 alias uint64_t = ulong; /// 220 221 alias int_least8_t = int8_t; /// 222 alias uint_least8_t = uint8_t; /// 223 alias int_least16_t = int16_t; /// 224 alias uint_least16_t = uint16_t; /// 225 alias int_least32_t = int32_t; /// 226 alias uint_least32_t = uint32_t; /// 227 alias int_least64_t = int64_t; /// 228 alias uint_least64_t = uint64_t; /// 229 230 alias int_fast8_t = int32_t; /// 231 alias uint_fast8_t = uint32_t; /// 232 alias int_fast16_t = int32_t; /// 233 alias uint_fast16_t = uint32_t; /// 234 alias int_fast32_t = int32_t; /// 235 alias uint_fast32_t = uint32_t; /// 236 alias int_fast64_t = int64_t; /// 237 alias uint_fast64_t = uint64_t; /// 238 239 alias intptr_t = ptrdiff_t; /// 240 alias uintptr_t = size_t; /// 241 alias intmax_t = long; /// 242 alias uintmax_t = ulong; /// 243} 244else version (FreeBSD) 245{ 246 alias int8_t = byte; /// 247 alias int16_t = short; /// 248 alias uint8_t = ubyte; /// 249 alias uint16_t = ushort; /// 250 alias int32_t = int; /// 251 alias uint32_t = uint; /// 252 alias int64_t = long; /// 253 alias uint64_t = ulong; /// 254 255 alias int_least8_t = byte; /// 256 alias uint_least8_t = ubyte; /// 257 alias int_least16_t = short; /// 258 alias uint_least16_t = ushort; /// 259 alias int_least32_t = int; /// 260 alias uint_least32_t = uint; /// 261 alias int_least64_t = long; /// 262 alias uint_least64_t = ulong; /// 263 264 alias int_fast8_t = int; /// 265 alias uint_fast8_t = uint; /// 266 alias int_fast16_t = int; /// 267 alias uint_fast16_t = uint; /// 268 alias int_fast32_t = int; /// 269 alias uint_fast32_t = uint; /// 270 alias int_fast64_t = long; /// 271 alias uint_fast64_t = ulong; /// 272 273 alias intptr_t = ptrdiff_t; /// 274 alias uintptr_t = size_t; /// 275 alias intmax_t = long; /// 276 alias uintmax_t = ulong; /// 277} 278else version (NetBSD) 279{ 280 alias int8_t = byte; /// 281 alias int16_t = short; /// 282 alias uint8_t = ubyte; /// 283 alias uint16_t = ushort; /// 284 alias int32_t = int; /// 285 alias uint32_t = uint; /// 286 alias int64_t = long; /// 287 alias uint64_t = ulong; /// 288 289 alias int_least8_t = int8_t; /// 290 alias uint_least8_t = uint8_t; /// 291 alias int_least16_t = int16_t; /// 292 alias uint_least16_t = uint16_t; /// 293 alias int_least32_t = int32_t; /// 294 alias uint_least32_t = uint32_t; /// 295 alias int_least64_t = int64_t; /// 296 alias uint_least64_t = uint64_t; /// 297 298 alias int_fast8_t = int32_t; /// 299 alias uint_fast8_t = uint32_t; /// 300 alias int_fast16_t = int32_t; /// 301 alias uint_fast16_t = uint32_t; /// 302 alias int_fast32_t = int32_t; /// 303 alias uint_fast32_t = uint32_t; /// 304 alias int_fast64_t = int64_t; /// 305 alias uint_fast64_t = uint64_t; /// 306 307 alias intptr_t = ptrdiff_t; /// 308 alias uintptr_t = size_t; /// 309 alias intmax_t = long; /// 310 alias uintmax_t = ulong; /// 311} 312else version (OpenBSD) 313{ 314 alias int8_t = byte; /// 315 alias int16_t = short; /// 316 alias uint8_t = ubyte; /// 317 alias uint16_t = ushort; /// 318 alias int32_t = int; /// 319 alias uint32_t = uint; /// 320 alias int64_t = cpp_longlong; /// 321 alias uint64_t = cpp_ulonglong; /// 322 323 alias int_least8_t = byte; /// 324 alias uint_least8_t = ubyte; /// 325 alias int_least16_t = short; /// 326 alias uint_least16_t = ushort; /// 327 alias int_least32_t = int; /// 328 alias uint_least32_t = uint; /// 329 alias int_least64_t = cpp_longlong; /// 330 alias uint_least64_t = cpp_ulonglong; /// 331 332 alias int_fast8_t = int; /// 333 alias uint_fast8_t = uint; /// 334 alias int_fast16_t = int; /// 335 alias uint_fast16_t = uint; /// 336 alias int_fast32_t = int; /// 337 alias uint_fast32_t = uint; /// 338 alias int_fast64_t = cpp_longlong; /// 339 alias uint_fast64_t = cpp_ulonglong; /// 340 341 alias intptr_t = cpp_long; /// 342 alias uintptr_t = cpp_ulong; /// 343 alias intmax_t = cpp_longlong; /// 344 alias uintmax_t = cpp_ulonglong; /// 345} 346else version (Solaris) 347{ 348 alias int8_t = char; /// 349 alias int16_t = short; /// 350 alias uint8_t = ubyte; /// 351 alias uint16_t = ushort; /// 352 alias int32_t = int; /// 353 alias uint32_t = uint; /// 354 alias int64_t = long; /// 355 alias uint64_t = ulong; /// 356 357 alias int_least8_t = char; /// 358 alias uint_least8_t = ubyte; /// 359 alias int_least16_t = short; /// 360 alias uint_least16_t = ushort; /// 361 alias int_least32_t = int; /// 362 alias uint_least32_t = uint; /// 363 alias int_least64_t = long; /// 364 alias uint_least64_t = ulong; /// 365 366 alias int_fast8_t = char; /// 367 alias uint_fast8_t = ubyte; /// 368 alias int_fast16_t = int; /// 369 alias uint_fast16_t = uint; /// 370 alias int_fast32_t = int; /// 371 alias uint_fast32_t = uint; /// 372 alias int_fast64_t = long; /// 373 alias uint_fast64_t = ulong; /// 374 375 alias intptr_t = ptrdiff_t; /// 376 alias uintptr_t = size_t; /// 377 alias intmax_t = long; /// 378 alias uintmax_t = ulong; /// 379} 380else 381{ 382 static assert(false, "Unsupported architecture."); 383} 384 385 386 387/// 388enum int8_t INT8_MIN = int8_t.min; 389/// 390enum int8_t INT8_MAX = int8_t.max; 391/// 392enum int16_t INT16_MIN = int16_t.min; 393/// 394enum int16_t INT16_MAX = int16_t.max; 395/// 396enum int32_t INT32_MIN = int32_t.min; 397/// 398enum int32_t INT32_MAX = int32_t.max; 399/// 400enum int64_t INT64_MIN = int64_t.min; 401/// 402enum int64_t INT64_MAX = int64_t.max; 403 404/// 405enum uint8_t UINT8_MAX = uint8_t.max; 406/// 407enum uint16_t UINT16_MAX = uint16_t.max; 408/// 409enum uint32_t UINT32_MAX = uint32_t.max; 410/// 411enum uint64_t UINT64_MAX = uint64_t.max; 412 413/// 414enum int_least8_t INT_LEAST8_MIN = int_least8_t.min; 415/// 416enum int_least8_t INT_LEAST8_MAX = int_least8_t.max; 417/// 418enum int_least16_t INT_LEAST16_MIN = int_least16_t.min; 419/// 420enum int_least16_t INT_LEAST16_MAX = int_least16_t.max; 421/// 422enum int_least32_t INT_LEAST32_MIN = int_least32_t.min; 423/// 424enum int_least32_t INT_LEAST32_MAX = int_least32_t.max; 425/// 426enum int_least64_t INT_LEAST64_MIN = int_least64_t.min; 427/// 428enum int_least64_t INT_LEAST64_MAX = int_least64_t.max; 429 430/// 431enum uint_least8_t UINT_LEAST8_MAX = uint_least8_t.max; 432/// 433enum uint_least16_t UINT_LEAST16_MAX = uint_least16_t.max; 434/// 435enum uint_least32_t UINT_LEAST32_MAX = uint_least32_t.max; 436/// 437enum uint_least64_t UINT_LEAST64_MAX = uint_least64_t.max; 438 439/// 440enum int_fast8_t INT_FAST8_MIN = int_fast8_t.min; 441/// 442enum int_fast8_t INT_FAST8_MAX = int_fast8_t.max; 443/// 444enum int_fast16_t INT_FAST16_MIN = int_fast16_t.min; 445/// 446enum int_fast16_t INT_FAST16_MAX = int_fast16_t.max; 447/// 448enum int_fast32_t INT_FAST32_MIN = int_fast32_t.min; 449/// 450enum int_fast32_t INT_FAST32_MAX = int_fast32_t.max; 451/// 452enum int_fast64_t INT_FAST64_MIN = int_fast64_t.min; 453/// 454enum int_fast64_t INT_FAST64_MAX = int_fast64_t.max; 455 456/// 457enum uint_fast8_t UINT_FAST8_MAX = uint_fast8_t.max; 458/// 459enum uint_fast16_t UINT_FAST16_MAX = uint_fast16_t.max; 460/// 461enum uint_fast32_t UINT_FAST32_MAX = uint_fast32_t.max; 462/// 463enum uint_fast64_t UINT_FAST64_MAX = uint_fast64_t.max; 464 465/// 466enum intptr_t INTPTR_MIN = intptr_t.min; 467/// 468enum intptr_t INTPTR_MAX = intptr_t.max; 469 470/// 471enum uintptr_t UINTPTR_MIN = uintptr_t.min; 472/// 473enum uintptr_t UINTPTR_MAX = uintptr_t.max; 474 475/// 476enum intmax_t INTMAX_MIN = intmax_t.min; 477/// 478enum intmax_t INTMAX_MAX = intmax_t.max; 479 480/// 481enum uintmax_t UINTMAX_MAX = uintmax_t.max; 482 483/// 484enum ptrdiff_t PTRDIFF_MIN = ptrdiff_t.min; 485/// 486enum ptrdiff_t PTRDIFF_MAX = ptrdiff_t.max; 487 488/// 489enum sig_atomic_t SIG_ATOMIC_MIN = sig_atomic_t.min; 490/// 491enum sig_atomic_t SIG_ATOMIC_MAX = sig_atomic_t.max; 492 493/// 494enum size_t SIZE_MAX = size_t.max; 495 496/// 497enum wchar_t WCHAR_MIN = wchar_t.min; 498/// 499enum wchar_t WCHAR_MAX = wchar_t.max; 500 501/// 502enum wint_t WINT_MIN = wint_t.min; 503/// 504enum wint_t WINT_MAX = wint_t.max; 505 506/// 507alias INT8_C = _typify!int8_t ; 508/// 509alias INT16_C = _typify!int16_t; 510/// 511alias INT32_C = _typify!int32_t; 512/// 513alias INT64_C = _typify!int64_t; 514 515/// 516alias UINT8_C = _typify!uint8_t ; 517/// 518alias UINT16_C = _typify!uint16_t; 519/// 520alias UINT32_C = _typify!uint32_t; 521/// 522alias UINT64_C = _typify!uint64_t; 523 524/// 525alias INTMAX_C = _typify!intmax_t ; 526/// 527alias UINTMAX_C = _typify!uintmax_t; 528