annotate paper-stdint.h @ 131:35580b661882 default tip

clump it
author Paper <paper@tflc.us>
date Mon, 17 Nov 2025 21:40:24 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
131
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
1 /* paper-stdint.h -- replacement stdint.h that does as much as it can
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
2 * without outside help
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
3 *
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
4 * Copyright (C) 2025 Paper
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
5 *
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
6 * This software is provided 'as-is', without any express or implied
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
7 * warranty. In no event will the authors be held liable for any damages
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
8 * arising from the use of this software.
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
9 *
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
10 * Permission is granted to anyone to use this software for any purpose,
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
11 * including commercial applications, and to alter it and redistribute it
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
12 * freely, subject to the following restrictions:
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
13 *
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
14 * 1. The origin of this software must not be misrepresented; you must not
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
15 * claim that you wrote the original software. If you use this software
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
16 * in a product, an acknowledgment in the product documentation would be
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
17 * appreciated but is not required.
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
18 * 2. Altered source versions must be plainly marked as such, and must not be
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
19 * misrepresented as being the original software.
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
20 * 3. This notice may not be removed or altered from any source distribution.
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
21 */
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
22
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
23 /**
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
24 * This is a drop-in replacement stdint.h that provides a
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
25 * subset of the features that the C99 equivalent provides.
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
26 *
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
27 * There are some caveats:
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
28 * - [u]intptr_t is not here. There's no way to do it portably.
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
29 * Thus INTPTR_MAX and friends are not here either. It may
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
30 * be possible to do it with __LP64__ or something, but that
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
31 * really isn't portable either :(
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
32 * - ptrdiff_t is not here.
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
33 * - int64_t relies on platform-specific extensions, or C99
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
34 * long long. Add your platform for funsies!
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
35 * - SIZE_MAX cannot be done portably. The closest thing we have
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
36 * is (~(size_t)0), which does not work in preprocessor
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
37 * expressions.
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
38 * - WINT_MIN cannot be done portably, nor can WCHAR_MIN,
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
39 * WINT_MAX, or WCHAR_MAX.
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
40 * - I have not implemented scanf specifiers. I don't use
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
41 * them, and neither should you. (the real reason is that
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
42 * "%hhd" was only added in C99).
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
43 *
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
44 * Maybe there's just something I missed. As far as I know
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
45 * these are impossible to do without compiler-specific
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
46 * extensions. --paper
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
47 **/
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
48
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
49 #ifndef PAPER_STDINT_H_
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
50 #define PAPER_STDINT_H_
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
51
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
52 /* need limits.h for INT_MIN etc */
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
53 #include <limits.h>
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
54
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
55 #define INT8_MAX 0x7F
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
56 #define INT8_MIN (-INT8_MAX - 1)
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
57 #define INT16_MAX 0x7FFF
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
58 #define INT16_MIN (-INT16_MAX - 1)
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
59 #define INT32_MAX 0x7FFFFFFF
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
60 #define INT32_MIN (-INT32_MAX - 1)
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
61 #define INT64_MAX 0x7FFFFFFFFFFFFFFF
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
62 #define INT64_MIN (-INT64_MAX - 1)
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
63 #define UINT8_MAX 0xFFu
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
64 #define UINT16_MAX 0xFFFFu
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
65 #define UINT32_MAX 0xFFFFFFFFu
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
66 #define UINT64_MAX 0xFFFFFFFFFFFFFFFFu
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
67
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
68 /* ?? */
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
69 #ifndef SIZE_MAX
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
70 # define SIZE_MAX (~(size_t)0)
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
71 #endif
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
72
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
73 #if UCHAR_MAX == UINT8_MAX
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
74 typedef unsigned char uint8_t;
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
75 # define PRIu8 "u"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
76 # define PRIo8 "o"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
77 # define PRIx8 "x"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
78 # define PRIX8 "X"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
79 # define UINT8_C(x) x ## U
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
80 #else
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
81 # error "no unsigned 8-bit type"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
82 #endif
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
83
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
84 #if UCHAR_MAX == UINT16_MAX
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
85 typedef unsigned char uint16_t;
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
86 # define PRIu16 "u"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
87 # define PRIo16 "o"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
88 # define PRIx16 "x"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
89 # define PRIX16 "X"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
90 # define UINT16_C(x) x ## U
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
91 #elif USHRT_MAX == UINT16_MAX
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
92 typedef unsigned short uint16_t;
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
93 # define PRIu16 "u"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
94 # define PRIo16 "o"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
95 # define PRIx16 "x"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
96 # define PRIX16 "X"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
97 # define UINT16_C(x) x ## U
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
98 #elif UINT_MAX == UINT16_MAX
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
99 typedef unsigned int uint16_t;
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
100 # define PRIu16 "u"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
101 # define PRIo16 "o"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
102 # define PRIx16 "x"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
103 # define PRIX16 "X"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
104 # define UINT16_C(x) x ## U
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
105 #else
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
106 # error "no unsigned 16-bit type"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
107 #endif
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
108
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
109 #if UCHAR_MAX == UINT32_MAX
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
110 typedef unsigned char uint32_t;
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
111 # define PRIu32 "u"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
112 # define PRIo32 "o"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
113 # define PRIx32 "x"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
114 # define PRIX32 "X"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
115 # define UINT32_C(x) x ## U
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
116 #elif USHRT_MAX == UINT32_MAX
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
117 typedef unsigned short uint32_t;
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
118 # define PRIu32 "u"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
119 # define PRIo32 "o"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
120 # define PRIx32 "x"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
121 # define PRIX32 "X"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
122 # define UINT32_C(x) x ## U
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
123 #elif UINT_MAX == UINT32_MAX
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
124 typedef unsigned int uint32_t;
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
125 # define PRIu32 "u"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
126 # define PRIo32 "o"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
127 # define PRIx32 "x"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
128 # define PRIX32 "X"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
129 # define UINT32_C(x) x ## U
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
130 #elif ULONG_MAX == UINT32_MAX
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
131 typedef unsigned long uint32_t;
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
132 # define PRIu32 "lu"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
133 # define PRIo32 "lo"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
134 # define PRIx32 "lx"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
135 # define PRIX32 "lX"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
136 # define UINT32_C(x) x ## UL
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
137 #else
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
138 # error "no unsigned 32-bit type"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
139 #endif
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
140
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
141 #if UCHAR_MAX == UINT64_MAX
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
142 typedef unsigned char uint64_t;
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
143 # define PRIu64 "u"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
144 # define PRIo64 "o"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
145 # define PRIx64 "x"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
146 # define PRIX64 "X"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
147 # define UINT64_C(x) x ## U
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
148 #elif USHRT_MAX == UINT64_MAX
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
149 typedef unsigned short uint64_t;
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
150 # define PRIu64 "u"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
151 # define PRIo64 "o"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
152 # define PRIx64 "x"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
153 # define PRIX64 "X"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
154 # define UINT64_C(x) x ## U
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
155 #elif UINT_MAX == UINT64_MAX
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
156 typedef unsigned int uint64_t;
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
157 # define PRIu64 "u"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
158 # define PRIo64 "o"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
159 # define PRIx64 "x"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
160 # define PRIX64 "X"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
161 # define UINT64_C(x) x ## U
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
162 #elif ULONG_MAX == UINT64_MAX
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
163 typedef unsigned long uint64_t;
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
164 # define PRIu64 "lu"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
165 # define PRIo64 "lo"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
166 # define PRIx64 "lx"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
167 # define PRIX64 "lX"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
168 # define UINT64_C(x) x ## UL
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
169 #elif defined(_MSC_VER)
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
170 typedef unsigned __int64 uint64_t;
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
171 # define PRIu64 "I64u"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
172 # define PRIo64 "I64o"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
173 # define PRIx64 "I64x"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
174 # define PRIX64 "I64X"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
175 # define UINT64_C(x) x ## Ui64
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
176 #elif ULLONG_MAX == UINT64_MAX
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
177 /* C99 */
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
178 typedef unsigned long long uint64_t;
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
179 # define PRIu64 "llu"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
180 # define PRIo64 "llo"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
181 # define PRIx64 "llx"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
182 # define PRIX64 "llX"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
183 # define UINT64_C(x) x ## ULL
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
184 #else
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
185 # error "no unsigned 64-bit type"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
186 #endif
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
187
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
188 #if SCHAR_MIN == INT8_MIN && SCHAR_MAX == INT8_MAX
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
189 typedef signed char int8_t;
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
190 # define PRId8 "d"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
191 # define INT8_C(x) x
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
192 #else
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
193 # error "no signed 8-bit type"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
194 #endif
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
195
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
196 #if SCHAR_MIN == INT16_MIN && SCHAR_MAX == INT16_MAX
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
197 typedef signed char int16_t;
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
198 # define PRId16 "d"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
199 # define INT16_C(x) x
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
200 #elif SHRT_MIN == INT16_MIN && SHRT_MAX == INT16_MAX
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
201 typedef signed short int16_t;
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
202 # define PRId16 "d"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
203 # define INT16_C(x) x
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
204 #elif INT_MIN == INT16_MIN && INT_MAX == INT16_MAX
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
205 typedef signed int int16_t;
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
206 # define PRId16 "d"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
207 # define INT16_C(x) x
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
208 #else
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
209 # error "no signed 16-bit type"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
210 #endif
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
211
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
212 #if SCHAR_MIN == INT32_MIN && SCHAR_MAX == INT32_MAX
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
213 typedef signed char int32_t;
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
214 # define PRId32 "d"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
215 # define INT32_C(x) x
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
216 #elif SHRT_MIN == INT32_MIN && SHRT_MAX == INT32_MAX
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
217 typedef signed short int32_t;
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
218 # define PRId32 "d"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
219 # define INT32_C(x) x
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
220 #elif INT_MIN == INT32_MIN && INT_MAX == INT32_MAX
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
221 typedef signed int int32_t;
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
222 # define PRId32 "d"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
223 # define INT32_C(x) x
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
224 #elif LONG_MIN == INT32_MIN && LONG_MAX == INT32_MAX
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
225 typedef signed long int32_t;
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
226 # define PRId32 "ld"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
227 # define INT32_C(x) x ## L
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
228 #else
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
229 # error "no signed 32-bit type"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
230 #endif
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
231
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
232 #if SCHAR_MIN == INT64_MIN && SCHAR_MAX == INT64_MAX
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
233 typedef signed char int64_t;
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
234 # define PRId64 "d"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
235 # define INT64_C(x) x
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
236 #elif SHRT_MIN == INT64_MIN && SHRT_MAX == INT64_MAX
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
237 typedef signed short int64_t;
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
238 # define PRId64 "d"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
239 # define INT64_C(x) x
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
240 #elif INT_MIN == INT64_MIN && INT_MAX == INT64_MAX
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
241 typedef signed int int64_t;
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
242 # define PRId64 "d"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
243 # define INT64_C(x) x
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
244 #elif LONG_MIN == INT64_MIN && LONG_MAX == INT64_MAX
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
245 typedef signed long int64_t;
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
246 # define PRId64 "ld"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
247 # define INT64_C(x) x ## L
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
248 #elif defined(_MSC_VER)
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
249 typedef signed __int64 int64_t;
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
250 # define PRId64 "I64d"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
251 # define INT64_C(x) x ## i64
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
252 #elif LLONG_MIN == INT64_MIN && LLONG_MAX == INT64_MAX
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
253 typedef signed long long int64_t;
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
254 # define PRId64 "lld"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
255 # define INT64_C(x) x ## LL
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
256 #else
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
257 # error "no signed 64-bit type"
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
258 #endif
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
259
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
260 #define PRIi8 PRId8
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
261 #define PRIi16 PRId16
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
262 #define PRIi32 PRId32
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
263 #define PRIi64 PRId64
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
264
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
265 /* -------------------------------------------------------------------------------- */
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
266 /* least types */
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
267
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
268 typedef int8_t int_least8_t;
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
269 typedef int16_t int_least16_t;
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
270 typedef int32_t int_least32_t;
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
271 typedef int64_t int_least64_t;
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
272
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
273 #define INT_LEAST8_MIN INT8_MIN
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
274 #define INT_LEAST8_MAX INT8_MAX
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
275 #define INT_LEAST16_MIN INT16_MIN
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
276 #define INT_LEAST16_MAX INT16_MAX
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
277 #define INT_LEAST32_MIN INT32_MIN
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
278 #define INT_LEAST32_MAX INT32_MAX
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
279 #define INT_LEAST64_MIN INT64_MIN
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
280 #define INT_LEAST64_MAX INT64_MAX
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
281
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
282 #define PRIdLEAST8 PRId8
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
283 #define PRIdLEAST16 PRId16
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
284 #define PRIdLEAST32 PRId32
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
285 #define PRIdLEAST64 PRId64
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
286 #define PRIxLEAST8 PRIx8
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
287 #define PRIxLEAST16 PRIx16
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
288 #define PRIxLEAST32 PRIx32
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
289 #define PRIxLEAST64 PRIx64
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
290 #define PRIoLEAST8 PRIo8
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
291 #define PRIoLEAST16 PRIo16
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
292 #define PRIoLEAST32 PRIo32
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
293 #define PRIoLEAST64 PRIo64
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
294 #define PRIiLEAST8 PRIi8
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
295 #define PRIiLEAST16 PRIi16
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
296 #define PRIiLEAST32 PRIi32
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
297 #define PRIiLEAST64 PRIi64
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
298 #define PRIXLEAST8 PRIX8
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
299 #define PRIXLEAST16 PRIX16
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
300 #define PRIXLEAST32 PRIX32
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
301 #define PRIXLEAST64 PRIX64
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
302 #define PRIuLEAST8 PRIu8
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
303 #define PRIuLEAST16 PRIu16
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
304 #define PRIuLEAST32 PRIu32
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
305 #define PRIuLEAST64 PRIu64
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
306
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
307 /* -------------------------------------------------------------------------------- */
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
308 /* fast types */
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
309
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
310 typedef int8_t int_fast8_t;
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
311 typedef int16_t int_fast16_t;
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
312 typedef int32_t int_fast32_t;
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
313 typedef int64_t int_fast64_t;
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
314
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
315 #define INT_FAST8_MIN INT8_MIN
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
316 #define INT_FAST8_MAX INT8_MAX
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
317 #define INT_FAST16_MIN INT16_MIN
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
318 #define INT_FAST16_MAX INT16_MAX
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
319 #define INT_FAST32_MIN INT32_MIN
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
320 #define INT_FAST32_MAX INT32_MAX
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
321 #define INT_FAST64_MIN INT64_MIN
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
322 #define INT_FAST64_MAX INT64_MAX
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
323
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
324 #define PRIdFAST8 PRId8
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
325 #define PRIdFAST16 PRId16
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
326 #define PRIdFAST32 PRId32
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
327 #define PRIdFAST64 PRId64
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
328 #define PRIxFAST8 PRIx8
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
329 #define PRIxFAST16 PRIx16
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
330 #define PRIxFAST32 PRIx32
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
331 #define PRIxFAST64 PRIx64
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
332 #define PRIoFAST8 PRIo8
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
333 #define PRIoFAST16 PRIo16
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
334 #define PRIoFAST32 PRIo32
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
335 #define PRIoFAST64 PRIo64
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
336 #define PRIiFAST8 PRIi8
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
337 #define PRIiFAST16 PRIi16
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
338 #define PRIiFAST32 PRIi32
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
339 #define PRIiFAST64 PRIi64
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
340 #define PRIXFAST8 PRIX8
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
341 #define PRIXFAST16 PRIX16
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
342 #define PRIXFAST32 PRIX32
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
343 #define PRIXFAST64 PRIX64
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
344 #define PRIuFAST8 PRIu8
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
345 #define PRIuFAST16 PRIu16
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
346 #define PRIuFAST32 PRIu32
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
347 #define PRIuFAST64 PRIu64
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
348
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
349 /* -------------------------------------------------------------------------------- */
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
350 /* [u]intmax_t -- this is hardcoded to 64-bit, beware! */
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
351
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
352 typedef int64_t intmax_t;
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
353 typedef uint64_t uintmax_t;
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
354
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
355 #define INTMAX_MIN INT64_MIN
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
356 #define INTMAX_MAX INT64_MAX
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
357 #define UINTMAX_MAX UINT64_MAX
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
358
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
359 #define PRIdMAX PRId64
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
360 #define PRIuMAX PRIu64
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
361 #define PRIxMAX PRIx64
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
362 #define PRIXMAX PRIX64
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
363 #define PRIoMAX PRIo64
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
364 #define PRIiMAX PRIi64
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
365
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
366 #define INTMAX_C(x) INT64_C(x)
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
367
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
368 #endif /* PAPER_STDINT_H_ */
35580b661882 clump it
Paper <paper@tflc.us>
parents:
diff changeset
369