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;