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