1 | /* Copyright (C) 1997-2022 Free Software Foundation, Inc. |
---|---|

2 | This file is part of the GNU C Library. |

3 | |

4 | The GNU C Library is free software; you can redistribute it and/or |

5 | modify it under the terms of the GNU Lesser General Public |

6 | License as published by the Free Software Foundation; either |

7 | version 2.1 of the License, or (at your option) any later version. |

8 | |

9 | The GNU C Library is distributed in the hope that it will be useful, |

10 | but WITHOUT ANY WARRANTY; without even the implied warranty of |

11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |

12 | Lesser General Public License for more details. |

13 | |

14 | You should have received a copy of the GNU Lesser General Public |

15 | License along with the GNU C Library; if not, see |

16 | <https://www.gnu.org/licenses/>. */ |

17 | |

18 | /* |

19 | * ISO C99: 7.18 Integer types <stdint.h> |

20 | */ |

21 | |

22 | #ifndef _STDINT_H |

23 | #define _STDINT_H 1 |

24 | |

25 | #define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION |

26 | #include <bits/libc-header-start.h> |

27 | #include <bits/types.h> |

28 | #include <bits/wchar.h> |

29 | #include <bits/wordsize.h> |

30 | |

31 | /* Exact integral types. */ |

32 | |

33 | /* Signed. */ |

34 | #include <bits/stdint-intn.h> |

35 | |

36 | /* Unsigned. */ |

37 | #include <bits/stdint-uintn.h> |

38 | |

39 | |

40 | /* Small types. */ |

41 | |

42 | /* Signed. */ |

43 | typedef __int_least8_t int_least8_t; |

44 | typedef __int_least16_t int_least16_t; |

45 | typedef __int_least32_t int_least32_t; |

46 | typedef __int_least64_t int_least64_t; |

47 | |

48 | /* Unsigned. */ |

49 | typedef __uint_least8_t uint_least8_t; |

50 | typedef __uint_least16_t uint_least16_t; |

51 | typedef __uint_least32_t uint_least32_t; |

52 | typedef __uint_least64_t uint_least64_t; |

53 | |

54 | |

55 | /* Fast types. */ |

56 | |

57 | /* Signed. */ |

58 | typedef signed char int_fast8_t; |

59 | #if __WORDSIZE == 64 |

60 | typedef long int int_fast16_t; |

61 | typedef long int int_fast32_t; |

62 | typedef long int int_fast64_t; |

63 | #else |

64 | typedef int int_fast16_t; |

65 | typedef int int_fast32_t; |

66 | __extension__ |

67 | typedef long long int int_fast64_t; |

68 | #endif |

69 | |

70 | /* Unsigned. */ |

71 | typedef unsigned char uint_fast8_t; |

72 | #if __WORDSIZE == 64 |

73 | typedef unsigned long int uint_fast16_t; |

74 | typedef unsigned long int uint_fast32_t; |

75 | typedef unsigned long int uint_fast64_t; |

76 | #else |

77 | typedef unsigned int uint_fast16_t; |

78 | typedef unsigned int uint_fast32_t; |

79 | __extension__ |

80 | typedef unsigned long long int uint_fast64_t; |

81 | #endif |

82 | |

83 | |

84 | /* Types for `void *' pointers. */ |

85 | #if __WORDSIZE == 64 |

86 | # ifndef __intptr_t_defined |

87 | typedef long int intptr_t; |

88 | # define __intptr_t_defined |

89 | # endif |

90 | typedef unsigned long int uintptr_t; |

91 | #else |

92 | # ifndef __intptr_t_defined |

93 | typedef int intptr_t; |

94 | # define __intptr_t_defined |

95 | # endif |

96 | typedef unsigned int uintptr_t; |

97 | #endif |

98 | |

99 | |

100 | /* Largest integral types. */ |

101 | typedef __intmax_t intmax_t; |

102 | typedef __uintmax_t uintmax_t; |

103 | |

104 | |

105 | # if __WORDSIZE == 64 |

106 | # define __INT64_C(c) c ## L |

107 | # define __UINT64_C(c) c ## UL |

108 | # else |

109 | # define __INT64_C(c) c ## LL |

110 | # define __UINT64_C(c) c ## ULL |

111 | # endif |

112 | |

113 | /* Limits of integral types. */ |

114 | |

115 | /* Minimum of signed integral types. */ |

116 | # define INT8_MIN (-128) |

117 | # define INT16_MIN (-32767-1) |

118 | # define INT32_MIN (-2147483647-1) |

119 | # define INT64_MIN (-__INT64_C(9223372036854775807)-1) |

120 | /* Maximum of signed integral types. */ |

121 | # define INT8_MAX (127) |

122 | # define INT16_MAX (32767) |

123 | # define INT32_MAX (2147483647) |

124 | # define INT64_MAX (__INT64_C(9223372036854775807)) |

125 | |

126 | /* Maximum of unsigned integral types. */ |

127 | # define UINT8_MAX (255) |

128 | # define UINT16_MAX (65535) |

129 | # define UINT32_MAX (4294967295U) |

130 | # define UINT64_MAX (__UINT64_C(18446744073709551615)) |

131 | |

132 | |

133 | /* Minimum of signed integral types having a minimum size. */ |

134 | # define INT_LEAST8_MIN (-128) |

135 | # define INT_LEAST16_MIN (-32767-1) |

136 | # define INT_LEAST32_MIN (-2147483647-1) |

137 | # define INT_LEAST64_MIN (-__INT64_C(9223372036854775807)-1) |

138 | /* Maximum of signed integral types having a minimum size. */ |

139 | # define INT_LEAST8_MAX (127) |

140 | # define INT_LEAST16_MAX (32767) |

141 | # define INT_LEAST32_MAX (2147483647) |

142 | # define INT_LEAST64_MAX (__INT64_C(9223372036854775807)) |

143 | |

144 | /* Maximum of unsigned integral types having a minimum size. */ |

145 | # define UINT_LEAST8_MAX (255) |

146 | # define UINT_LEAST16_MAX (65535) |

147 | # define UINT_LEAST32_MAX (4294967295U) |

148 | # define UINT_LEAST64_MAX (__UINT64_C(18446744073709551615)) |

149 | |

150 | |

151 | /* Minimum of fast signed integral types having a minimum size. */ |

152 | # define INT_FAST8_MIN (-128) |

153 | # if __WORDSIZE == 64 |

154 | # define INT_FAST16_MIN (-9223372036854775807L-1) |

155 | # define INT_FAST32_MIN (-9223372036854775807L-1) |

156 | # else |

157 | # define INT_FAST16_MIN (-2147483647-1) |

158 | # define INT_FAST32_MIN (-2147483647-1) |

159 | # endif |

160 | # define INT_FAST64_MIN (-__INT64_C(9223372036854775807)-1) |

161 | /* Maximum of fast signed integral types having a minimum size. */ |

162 | # define INT_FAST8_MAX (127) |

163 | # if __WORDSIZE == 64 |

164 | # define INT_FAST16_MAX (9223372036854775807L) |

165 | # define INT_FAST32_MAX (9223372036854775807L) |

166 | # else |

167 | # define INT_FAST16_MAX (2147483647) |

168 | # define INT_FAST32_MAX (2147483647) |

169 | # endif |

170 | # define INT_FAST64_MAX (__INT64_C(9223372036854775807)) |

171 | |

172 | /* Maximum of fast unsigned integral types having a minimum size. */ |

173 | # define UINT_FAST8_MAX (255) |

174 | # if __WORDSIZE == 64 |

175 | # define UINT_FAST16_MAX (18446744073709551615UL) |

176 | # define UINT_FAST32_MAX (18446744073709551615UL) |

177 | # else |

178 | # define UINT_FAST16_MAX (4294967295U) |

179 | # define UINT_FAST32_MAX (4294967295U) |

180 | # endif |

181 | # define UINT_FAST64_MAX (__UINT64_C(18446744073709551615)) |

182 | |

183 | |

184 | /* Values to test for integral types holding `void *' pointer. */ |

185 | # if __WORDSIZE == 64 |

186 | # define INTPTR_MIN (-9223372036854775807L-1) |

187 | # define INTPTR_MAX (9223372036854775807L) |

188 | # define UINTPTR_MAX (18446744073709551615UL) |

189 | # else |

190 | # define INTPTR_MIN (-2147483647-1) |

191 | # define INTPTR_MAX (2147483647) |

192 | # define UINTPTR_MAX (4294967295U) |

193 | # endif |

194 | |

195 | |

196 | /* Minimum for largest signed integral type. */ |

197 | # define INTMAX_MIN (-__INT64_C(9223372036854775807)-1) |

198 | /* Maximum for largest signed integral type. */ |

199 | # define INTMAX_MAX (__INT64_C(9223372036854775807)) |

200 | |

201 | /* Maximum for largest unsigned integral type. */ |

202 | # define UINTMAX_MAX (__UINT64_C(18446744073709551615)) |

203 | |

204 | |

205 | /* Limits of other integer types. */ |

206 | |

207 | /* Limits of `ptrdiff_t' type. */ |

208 | # if __WORDSIZE == 64 |

209 | # define PTRDIFF_MIN (-9223372036854775807L-1) |

210 | # define PTRDIFF_MAX (9223372036854775807L) |

211 | # else |

212 | # if __WORDSIZE32_PTRDIFF_LONG |

213 | # define PTRDIFF_MIN (-2147483647L-1) |

214 | # define PTRDIFF_MAX (2147483647L) |

215 | # else |

216 | # define PTRDIFF_MIN (-2147483647-1) |

217 | # define PTRDIFF_MAX (2147483647) |

218 | # endif |

219 | # endif |

220 | |

221 | /* Limits of `sig_atomic_t'. */ |

222 | # define SIG_ATOMIC_MIN (-2147483647-1) |

223 | # define SIG_ATOMIC_MAX (2147483647) |

224 | |

225 | /* Limit of `size_t' type. */ |

226 | # if __WORDSIZE == 64 |

227 | # define SIZE_MAX (18446744073709551615UL) |

228 | # else |

229 | # if __WORDSIZE32_SIZE_ULONG |

230 | # define SIZE_MAX (4294967295UL) |

231 | # else |

232 | # define SIZE_MAX (4294967295U) |

233 | # endif |

234 | # endif |

235 | |

236 | /* Limits of `wchar_t'. */ |

237 | # ifndef WCHAR_MIN |

238 | /* These constants might also be defined in <wchar.h>. */ |

239 | # define WCHAR_MIN __WCHAR_MIN |

240 | # define WCHAR_MAX __WCHAR_MAX |

241 | # endif |

242 | |

243 | /* Limits of `wint_t'. */ |

244 | # define WINT_MIN (0u) |

245 | # define WINT_MAX (4294967295u) |

246 | |

247 | /* Signed. */ |

248 | # define INT8_C(c) c |

249 | # define INT16_C(c) c |

250 | # define INT32_C(c) c |

251 | # if __WORDSIZE == 64 |

252 | # define INT64_C(c) c ## L |

253 | # else |

254 | # define INT64_C(c) c ## LL |

255 | # endif |

256 | |

257 | /* Unsigned. */ |

258 | # define UINT8_C(c) c |

259 | # define UINT16_C(c) c |

260 | # define UINT32_C(c) c ## U |

261 | # if __WORDSIZE == 64 |

262 | # define UINT64_C(c) c ## UL |

263 | # else |

264 | # define UINT64_C(c) c ## ULL |

265 | # endif |

266 | |

267 | /* Maximal type. */ |

268 | # if __WORDSIZE == 64 |

269 | # define INTMAX_C(c) c ## L |

270 | # define UINTMAX_C(c) c ## UL |

271 | # else |

272 | # define INTMAX_C(c) c ## LL |

273 | # define UINTMAX_C(c) c ## ULL |

274 | # endif |

275 | |

276 | #if __GLIBC_USE (IEC_60559_BFP_EXT_C2X) |

277 | |

278 | # define INT8_WIDTH 8 |

279 | # define UINT8_WIDTH 8 |

280 | # define INT16_WIDTH 16 |

281 | # define UINT16_WIDTH 16 |

282 | # define INT32_WIDTH 32 |

283 | # define UINT32_WIDTH 32 |

284 | # define INT64_WIDTH 64 |

285 | # define UINT64_WIDTH 64 |

286 | |

287 | # define INT_LEAST8_WIDTH 8 |

288 | # define UINT_LEAST8_WIDTH 8 |

289 | # define INT_LEAST16_WIDTH 16 |

290 | # define UINT_LEAST16_WIDTH 16 |

291 | # define INT_LEAST32_WIDTH 32 |

292 | # define UINT_LEAST32_WIDTH 32 |

293 | # define INT_LEAST64_WIDTH 64 |

294 | # define UINT_LEAST64_WIDTH 64 |

295 | |

296 | # define INT_FAST8_WIDTH 8 |

297 | # define UINT_FAST8_WIDTH 8 |

298 | # define INT_FAST16_WIDTH __WORDSIZE |

299 | # define UINT_FAST16_WIDTH __WORDSIZE |

300 | # define INT_FAST32_WIDTH __WORDSIZE |

301 | # define UINT_FAST32_WIDTH __WORDSIZE |

302 | # define INT_FAST64_WIDTH 64 |

303 | # define UINT_FAST64_WIDTH 64 |

304 | |

305 | # define INTPTR_WIDTH __WORDSIZE |

306 | # define UINTPTR_WIDTH __WORDSIZE |

307 | |

308 | # define INTMAX_WIDTH 64 |

309 | # define UINTMAX_WIDTH 64 |

310 | |

311 | # define PTRDIFF_WIDTH __WORDSIZE |

312 | # define SIG_ATOMIC_WIDTH 32 |

313 | # define SIZE_WIDTH __WORDSIZE |

314 | # define WCHAR_WIDTH 32 |

315 | # define WINT_WIDTH 32 |

316 | |

317 | #endif |

318 | |

319 | #endif /* stdint.h */ |

320 |