xref: /netbsd-src/external/gpl3/gcc/dist/libphobos/libdruntime/core/stdc/stdint.d (revision 0a3071956a3a9fdebdbf7f338cf2d439b45fc728)
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)32 T _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)46 version (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 }
version(Darwin)96 else 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 }
version(linux)130 else 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 }
version(CRuntime_Glibc)176 else 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 }
version(DragonFlyBSD)210 else 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 }
version(FreeBSD)244 else 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 }
version(NetBSD)278 else 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 }
version(OpenBSD)312 else 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 }
version(Solaris)346 else 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 }
380 else
381 {
382     static assert(false, "Unsupported architecture.");
383 }
384 
385 
386 
387 ///
388 enum int8_t   INT8_MIN  = int8_t.min;
389 ///
390 enum int8_t   INT8_MAX  = int8_t.max;
391 ///
392 enum int16_t  INT16_MIN = int16_t.min;
393 ///
394 enum int16_t  INT16_MAX = int16_t.max;
395 ///
396 enum int32_t  INT32_MIN = int32_t.min;
397 ///
398 enum int32_t  INT32_MAX = int32_t.max;
399 ///
400 enum int64_t  INT64_MIN = int64_t.min;
401 ///
402 enum int64_t  INT64_MAX = int64_t.max;
403 
404 ///
405 enum uint8_t  UINT8_MAX  = uint8_t.max;
406 ///
407 enum uint16_t UINT16_MAX = uint16_t.max;
408 ///
409 enum uint32_t UINT32_MAX = uint32_t.max;
410 ///
411 enum uint64_t UINT64_MAX = uint64_t.max;
412 
413 ///
414 enum int_least8_t    INT_LEAST8_MIN   = int_least8_t.min;
415 ///
416 enum int_least8_t    INT_LEAST8_MAX   = int_least8_t.max;
417 ///
418 enum int_least16_t   INT_LEAST16_MIN  = int_least16_t.min;
419 ///
420 enum int_least16_t   INT_LEAST16_MAX  = int_least16_t.max;
421 ///
422 enum int_least32_t   INT_LEAST32_MIN  = int_least32_t.min;
423 ///
424 enum int_least32_t   INT_LEAST32_MAX  = int_least32_t.max;
425 ///
426 enum int_least64_t   INT_LEAST64_MIN  = int_least64_t.min;
427 ///
428 enum int_least64_t   INT_LEAST64_MAX  = int_least64_t.max;
429 
430 ///
431 enum uint_least8_t   UINT_LEAST8_MAX  = uint_least8_t.max;
432 ///
433 enum uint_least16_t  UINT_LEAST16_MAX = uint_least16_t.max;
434 ///
435 enum uint_least32_t  UINT_LEAST32_MAX = uint_least32_t.max;
436 ///
437 enum uint_least64_t  UINT_LEAST64_MAX = uint_least64_t.max;
438 
439 ///
440 enum int_fast8_t   INT_FAST8_MIN   = int_fast8_t.min;
441 ///
442 enum int_fast8_t   INT_FAST8_MAX   = int_fast8_t.max;
443 ///
444 enum int_fast16_t  INT_FAST16_MIN  = int_fast16_t.min;
445 ///
446 enum int_fast16_t  INT_FAST16_MAX  = int_fast16_t.max;
447 ///
448 enum int_fast32_t  INT_FAST32_MIN  = int_fast32_t.min;
449 ///
450 enum int_fast32_t  INT_FAST32_MAX  = int_fast32_t.max;
451 ///
452 enum int_fast64_t  INT_FAST64_MIN  = int_fast64_t.min;
453 ///
454 enum int_fast64_t  INT_FAST64_MAX  = int_fast64_t.max;
455 
456 ///
457 enum uint_fast8_t  UINT_FAST8_MAX  = uint_fast8_t.max;
458 ///
459 enum uint_fast16_t UINT_FAST16_MAX = uint_fast16_t.max;
460 ///
461 enum uint_fast32_t UINT_FAST32_MAX = uint_fast32_t.max;
462 ///
463 enum uint_fast64_t UINT_FAST64_MAX = uint_fast64_t.max;
464 
465 ///
466 enum intptr_t  INTPTR_MIN  = intptr_t.min;
467 ///
468 enum intptr_t  INTPTR_MAX  = intptr_t.max;
469 
470 ///
471 enum uintptr_t UINTPTR_MIN = uintptr_t.min;
472 ///
473 enum uintptr_t UINTPTR_MAX = uintptr_t.max;
474 
475 ///
476 enum intmax_t  INTMAX_MIN  = intmax_t.min;
477 ///
478 enum intmax_t  INTMAX_MAX  = intmax_t.max;
479 
480 ///
481 enum uintmax_t UINTMAX_MAX = uintmax_t.max;
482 
483 ///
484 enum ptrdiff_t PTRDIFF_MIN = ptrdiff_t.min;
485 ///
486 enum ptrdiff_t PTRDIFF_MAX = ptrdiff_t.max;
487 
488 ///
489 enum sig_atomic_t SIG_ATOMIC_MIN = sig_atomic_t.min;
490 ///
491 enum sig_atomic_t SIG_ATOMIC_MAX = sig_atomic_t.max;
492 
493 ///
494 enum size_t  SIZE_MAX  = size_t.max;
495 
496 ///
497 enum wchar_t WCHAR_MIN = wchar_t.min;
498 ///
499 enum wchar_t WCHAR_MAX = wchar_t.max;
500 
501 ///
502 enum wint_t  WINT_MIN  = wint_t.min;
503 ///
504 enum wint_t  WINT_MAX  = wint_t.max;
505 
506 ///
507 alias INT8_C  = _typify!int8_t ;
508 ///
509 alias INT16_C = _typify!int16_t;
510 ///
511 alias INT32_C = _typify!int32_t;
512 ///
513 alias INT64_C = _typify!int64_t;
514 
515 ///
516 alias UINT8_C  = _typify!uint8_t ;
517 ///
518 alias UINT16_C = _typify!uint16_t;
519 ///
520 alias UINT32_C = _typify!uint32_t;
521 ///
522 alias UINT64_C = _typify!uint64_t;
523 
524 ///
525 alias INTMAX_C  = _typify!intmax_t ;
526 ///
527 alias UINTMAX_C = _typify!uintmax_t;
528