int.h 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080
  1. /*============================================================================
  2. Kitware Information Macro Library
  3. Copyright 2010-2018 Kitware, Inc.
  4. All rights reserved.
  5. Redistribution and use in source and binary forms, with or without
  6. modification, are permitted provided that the following conditions
  7. are met:
  8. * Redistributions of source code must retain the above copyright
  9. notice, this list of conditions and the following disclaimer.
  10. * Redistributions in binary form must reproduce the above copyright
  11. notice, this list of conditions and the following disclaimer in the
  12. documentation and/or other materials provided with the distribution.
  13. * Neither the name of Kitware, Inc. nor the names of its contributors
  14. may be used to endorse or promote products derived from this
  15. software without specific prior written permission.
  16. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  17. "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  18. LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  19. A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  20. HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  21. SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  22. LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  23. DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  24. THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  25. (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  26. OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  27. ============================================================================*/
  28. /*
  29. This header defines macros with information about sized integer types.
  30. Only information that can be determined using the preprocessor at
  31. compilation time is available. No try-compile results may be added
  32. here. Instead we memorize results on platforms of interest.
  33. An includer may optionally define the following macros to suppress errors:
  34. Input:
  35. KWIML_INT_NO_VERIFY = skip verification declarations
  36. KWIML_INT_NO_ERROR_INT64_T = type 'KWIML_INT_int64_t' is optional (*)
  37. KWIML_INT_NO_ERROR_UINT64_T = type 'KWIML_INT_uint64_t' is optional (*)
  38. KWIML_INT_NO_ERROR_INTPTR_T = type 'KWIML_INT_intptr_t' is optional (*)
  39. KWIML_INT_NO_ERROR_UINTPTR_T = type 'KWIML_INT_uintptr_t' is optional (*)
  40. An includer may optionally define the following macros to override defaults.
  41. Either way, an includer may test these macros after inclusion:
  42. KWIML_INT_HAVE_STDINT_H = include <stdint.h>
  43. KWIML_INT_NO_STDINT_H = do not include <stdint.h>
  44. KWIML_INT_HAVE_INTTYPES_H = include <inttypes.h>
  45. KWIML_INT_NO_INTTYPES_H = do not include <inttypes.h>
  46. An includer may test the following macros after inclusion:
  47. KWIML_INT_VERSION = interface version number # of this header
  48. KWIML_INT_HAVE_INT#_T = type 'int#_t' is available
  49. KWIML_INT_HAVE_UINT#_T = type 'uint#_t' is available
  50. # = 8, 16, 32, 64, PTR
  51. KWIML_INT_int#_t = signed integer type exactly # bits wide
  52. KWIML_INT_uint#_t = unsigned integer type exactly # bits wide
  53. # = 8, 16, 32, 64 (*), ptr (*)
  54. KWIML_INT_NO_INT64_T = type 'KWIML_INT_int64_t' not available
  55. KWIML_INT_NO_UINT64_T = type 'KWIML_INT_uint64_t' not available
  56. KWIML_INT_NO_INTPTR_T = type 'KWIML_INT_intptr_t' not available
  57. KWIML_INT_NO_UINTPTR_T = type 'KWIML_INT_uintptr_t' not available
  58. KWIML_INT_INT#_C(c) = signed integer constant at least # bits wide
  59. KWIML_INT_UINT#_C(c) = unsigned integer constant at least # bits wide
  60. # = 8, 16, 32, 64 (*)
  61. KWIML_INT_<fmt># = print or scan format, <fmt> in table below
  62. # = 8, 16, 32, 64, PTR (*)
  63. signed unsigned
  64. ----------- ------------------------------
  65. | decimal | decimal octal hexadecimal |
  66. print | PRId PRIi | PRIu PRIo PRIx PRIX |
  67. scan | SCNd SCNi | SCNu SCNo SCNx |
  68. ----------- ------------------------------
  69. The SCN*8 and SCN*64 format macros will not be defined on systems
  70. with scanf implementations known not to support them.
  71. KWIML_INT_BROKEN_<fmt># = macro <fmt># is incorrect if defined
  72. Some compilers define integer format macros incorrectly for their
  73. own formatted print/scan implementations.
  74. KWIML_INT_BROKEN_INT#_C = macro INT#_C is incorrect if defined
  75. KWIML_INT_BROKEN_UINT#_C = macro UINT#_C is incorrect if defined
  76. Some compilers define integer constant macros incorrectly and
  77. cannot handle literals as large as the integer type or even
  78. produce bad preprocessor syntax.
  79. KWIML_INT_BROKEN_INT8_T = type 'int8_t' is available but incorrect
  80. Some compilers have a flag to make 'char' (un)signed but do not account
  81. for it while defining int8_t in the non-default case.
  82. The broken cases do not affect correctness of the macros documented above.
  83. */
  84. #include "abi.h"
  85. #define KWIML_INT_private_VERSION 1
  86. /* Guard definition of this version. */
  87. #ifndef KWIML_INT_detail_DEFINED_VERSION_1
  88. # define KWIML_INT_detail_DEFINED_VERSION_1 1
  89. # define KWIML_INT_private_DO_DEFINE
  90. #endif
  91. /* Guard verification of this version. */
  92. #if !defined(KWIML_INT_NO_VERIFY)
  93. # ifndef KWIML_INT_detail_VERIFIED_VERSION_1
  94. # define KWIML_INT_detail_VERIFIED_VERSION_1
  95. # define KWIML_INT_private_DO_VERIFY
  96. # endif
  97. #endif
  98. #ifdef KWIML_INT_private_DO_DEFINE
  99. #undef KWIML_INT_private_DO_DEFINE
  100. /* Define version as most recent of those included. */
  101. #if !defined(KWIML_INT_VERSION) || KWIML_INT_VERSION < KWIML_INT_private_VERSION
  102. # undef KWIML_INT_VERSION
  103. # define KWIML_INT_VERSION 1
  104. #endif
  105. /*--------------------------------------------------------------------------*/
  106. #if defined(KWIML_INT_HAVE_STDINT_H) /* Already defined. */
  107. #elif defined(KWIML_INT_NO_STDINT_H) /* Already defined. */
  108. #elif defined(HAVE_STDINT_H) /* Optionally provided by includer. */
  109. # define KWIML_INT_HAVE_STDINT_H 1
  110. #elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */
  111. # define KWIML_INT_HAVE_STDINT_H 1
  112. #elif defined(_MSC_VER) /* MSVC */
  113. # if _MSC_VER >= 1600
  114. # define KWIML_INT_HAVE_STDINT_H 1
  115. # else
  116. # define KWIML_INT_NO_STDINT_H 1
  117. # endif
  118. #elif defined(__BORLANDC__) /* Borland */
  119. # if __BORLANDC__ >= 0x560
  120. # define KWIML_INT_HAVE_STDINT_H 1
  121. # else
  122. # define KWIML_INT_NO_STDINT_H 1
  123. # endif
  124. #elif defined(__WATCOMC__) /* Watcom */
  125. # define KWIML_INT_NO_STDINT_H 1
  126. #endif
  127. /*--------------------------------------------------------------------------*/
  128. #if defined(KWIML_INT_HAVE_INTTYPES_H) /* Already defined. */
  129. #elif defined(KWIML_INT_NO_INTTYPES_H) /* Already defined. */
  130. #elif defined(HAVE_INTTYPES_H) /* Optionally provided by includer. */
  131. # define KWIML_INT_HAVE_INTTYPES_H 1
  132. #elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */
  133. # define KWIML_INT_HAVE_INTTYPES_H 1
  134. #elif defined(_MSC_VER) /* MSVC */
  135. # define KWIML_INT_NO_INTTYPES_H 1
  136. #elif defined(__BORLANDC__) /* Borland */
  137. # define KWIML_INT_NO_INTTYPES_H 1
  138. #elif defined(__WATCOMC__) /* Watcom */
  139. # define KWIML_INT_NO_INTTYPES_H 1
  140. #else /* Assume it exists. */
  141. # define KWIML_INT_HAVE_INTTYPES_H 1
  142. #endif
  143. /*--------------------------------------------------------------------------*/
  144. #if defined(KWIML_INT_HAVE_STDINT_H) && defined(KWIML_INT_NO_STDINT_H)
  145. # error "Both KWIML_INT_HAVE_STDINT_H and KWIML_INT_NO_STDINT_H defined!"
  146. #endif
  147. #if defined(KWIML_INT_HAVE_INTTYPES_H) && defined(KWIML_INT_NO_INTTYPES_H)
  148. # error "Both KWIML_INT_HAVE_INTTYPES_H and KWIML_INT_NO_INTTYPES_H defined!"
  149. #endif
  150. #if defined(KWIML_INT_HAVE_STDINT_H)
  151. # ifndef KWIML_INT_detail_INCLUDED_STDINT_H
  152. # define KWIML_INT_detail_INCLUDED_STDINT_H
  153. # include <stdint.h>
  154. # endif
  155. #endif
  156. #if defined(KWIML_INT_HAVE_INTTYPES_H)
  157. # ifndef KWIML_INT_detail_INCLUDED_INTTYPES_H
  158. # define KWIML_INT_detail_INCLUDED_INTTYPES_H
  159. # if defined(__cplusplus) && !defined(__STDC_FORMAT_MACROS)
  160. # define __STDC_FORMAT_MACROS
  161. # endif
  162. # include <inttypes.h>
  163. # endif
  164. #endif
  165. #if defined(KWIML_INT_HAVE_STDINT_H) || defined(KWIML_INT_HAVE_INTTYPES_H)
  166. #define KWIML_INT_HAVE_INT8_T 1
  167. #define KWIML_INT_HAVE_UINT8_T 1
  168. #define KWIML_INT_HAVE_INT16_T 1
  169. #define KWIML_INT_HAVE_UINT16_T 1
  170. #define KWIML_INT_HAVE_INT32_T 1
  171. #define KWIML_INT_HAVE_UINT32_T 1
  172. #define KWIML_INT_HAVE_INT64_T 1
  173. #define KWIML_INT_HAVE_UINT64_T 1
  174. #define KWIML_INT_HAVE_INTPTR_T 1
  175. #define KWIML_INT_HAVE_UINTPTR_T 1
  176. # if defined(__cplusplus)
  177. # define KWIML_INT_detail_GLOBAL_NS(T) ::T
  178. # else
  179. # define KWIML_INT_detail_GLOBAL_NS(T) T
  180. # endif
  181. #endif
  182. #if defined(_AIX43) && !defined(_AIX50) && !defined(_AIX51)
  183. /* AIX 4.3 defines these incorrectly with % and no quotes. */
  184. # define KWIML_INT_BROKEN_PRId8 1
  185. # define KWIML_INT_BROKEN_SCNd8 1
  186. # define KWIML_INT_BROKEN_PRIi8 1
  187. # define KWIML_INT_BROKEN_SCNi8 1
  188. # define KWIML_INT_BROKEN_PRIo8 1
  189. # define KWIML_INT_BROKEN_SCNo8 1
  190. # define KWIML_INT_BROKEN_PRIu8 1
  191. # define KWIML_INT_BROKEN_SCNu8 1
  192. # define KWIML_INT_BROKEN_PRIx8 1
  193. # define KWIML_INT_BROKEN_SCNx8 1
  194. # define KWIML_INT_BROKEN_PRIX8 1
  195. # define KWIML_INT_BROKEN_PRId16 1
  196. # define KWIML_INT_BROKEN_SCNd16 1
  197. # define KWIML_INT_BROKEN_PRIi16 1
  198. # define KWIML_INT_BROKEN_SCNi16 1
  199. # define KWIML_INT_BROKEN_PRIo16 1
  200. # define KWIML_INT_BROKEN_SCNo16 1
  201. # define KWIML_INT_BROKEN_PRIu16 1
  202. # define KWIML_INT_BROKEN_SCNu16 1
  203. # define KWIML_INT_BROKEN_PRIx16 1
  204. # define KWIML_INT_BROKEN_SCNx16 1
  205. # define KWIML_INT_BROKEN_PRIX16 1
  206. # define KWIML_INT_BROKEN_PRId32 1
  207. # define KWIML_INT_BROKEN_SCNd32 1
  208. # define KWIML_INT_BROKEN_PRIi32 1
  209. # define KWIML_INT_BROKEN_SCNi32 1
  210. # define KWIML_INT_BROKEN_PRIo32 1
  211. # define KWIML_INT_BROKEN_SCNo32 1
  212. # define KWIML_INT_BROKEN_PRIu32 1
  213. # define KWIML_INT_BROKEN_SCNu32 1
  214. # define KWIML_INT_BROKEN_PRIx32 1
  215. # define KWIML_INT_BROKEN_SCNx32 1
  216. # define KWIML_INT_BROKEN_PRIX32 1
  217. # define KWIML_INT_BROKEN_PRId64 1
  218. # define KWIML_INT_BROKEN_SCNd64 1
  219. # define KWIML_INT_BROKEN_PRIi64 1
  220. # define KWIML_INT_BROKEN_SCNi64 1
  221. # define KWIML_INT_BROKEN_PRIo64 1
  222. # define KWIML_INT_BROKEN_SCNo64 1
  223. # define KWIML_INT_BROKEN_PRIu64 1
  224. # define KWIML_INT_BROKEN_SCNu64 1
  225. # define KWIML_INT_BROKEN_PRIx64 1
  226. # define KWIML_INT_BROKEN_SCNx64 1
  227. # define KWIML_INT_BROKEN_PRIX64 1
  228. # define KWIML_INT_BROKEN_PRIdPTR 1
  229. # define KWIML_INT_BROKEN_SCNdPTR 1
  230. # define KWIML_INT_BROKEN_PRIiPTR 1
  231. # define KWIML_INT_BROKEN_SCNiPTR 1
  232. # define KWIML_INT_BROKEN_PRIoPTR 1
  233. # define KWIML_INT_BROKEN_SCNoPTR 1
  234. # define KWIML_INT_BROKEN_PRIuPTR 1
  235. # define KWIML_INT_BROKEN_SCNuPTR 1
  236. # define KWIML_INT_BROKEN_PRIxPTR 1
  237. # define KWIML_INT_BROKEN_SCNxPTR 1
  238. # define KWIML_INT_BROKEN_PRIXPTR 1
  239. #endif
  240. #if (defined(__SUNPRO_C)||defined(__SUNPRO_CC)) && defined(_CHAR_IS_UNSIGNED)
  241. # define KWIML_INT_BROKEN_INT8_T 1 /* system type defined incorrectly */
  242. #elif defined(__BORLANDC__) && defined(_CHAR_UNSIGNED)
  243. # define KWIML_INT_BROKEN_INT8_T 1 /* system type defined incorrectly */
  244. #endif
  245. /*--------------------------------------------------------------------------*/
  246. #if !defined(KWIML_INT_int8_t)
  247. # if defined(KWIML_INT_HAVE_INT8_T) && !defined(KWIML_INT_BROKEN_INT8_T)
  248. # define KWIML_INT_int8_t KWIML_INT_detail_GLOBAL_NS(int8_t)
  249. # else
  250. # define KWIML_INT_int8_t signed char
  251. # endif
  252. #endif
  253. #if !defined(KWIML_INT_uint8_t)
  254. # if defined(KWIML_INT_HAVE_UINT8_T)
  255. # define KWIML_INT_uint8_t KWIML_INT_detail_GLOBAL_NS(uint8_t)
  256. # else
  257. # define KWIML_INT_uint8_t unsigned char
  258. # endif
  259. #endif
  260. #if defined(__INTEL_COMPILER)
  261. # if defined(_WIN32)
  262. # define KWIML_INT_private_NO_SCN8
  263. # endif
  264. #elif defined(__SUNPRO_C) || defined(__SUNPRO_CC)
  265. # define KWIML_INT_private_NO_SCN8
  266. #elif defined(__BORLANDC__)
  267. # define KWIML_INT_private_NO_SCN8
  268. # define KWIML_INT_private_NO_SCN64
  269. #elif defined(_MSC_VER)
  270. # define KWIML_INT_private_NO_SCN8
  271. #elif defined(__WATCOMC__)
  272. # define KWIML_INT_private_NO_SCN8
  273. # elif defined(__hpux) /* HP runtime lacks support (any compiler) */
  274. # define KWIML_INT_private_NO_SCN8
  275. #endif
  276. /* 8-bit d, i */
  277. #if !defined(KWIML_INT_PRId8)
  278. # if defined(KWIML_INT_HAVE_INT8_T) && defined(PRId8) \
  279. && !defined(KWIML_INT_BROKEN_PRId8)
  280. # define KWIML_INT_PRId8 PRId8
  281. # else
  282. # define KWIML_INT_PRId8 "d"
  283. # endif
  284. #endif
  285. #if !defined(KWIML_INT_SCNd8)
  286. # if defined(KWIML_INT_HAVE_INT8_T) && defined(SCNd8) \
  287. && !defined(KWIML_INT_BROKEN_SCNd8)
  288. # define KWIML_INT_SCNd8 SCNd8
  289. # elif !defined(KWIML_INT_private_NO_SCN8)
  290. # define KWIML_INT_SCNd8 "hhd"
  291. # endif
  292. #endif
  293. #if !defined(KWIML_INT_PRIi8)
  294. # if defined(KWIML_INT_HAVE_INT8_T) && defined(PRIi8) \
  295. && !defined(KWIML_INT_BROKEN_PRIi8)
  296. # define KWIML_INT_PRIi8 PRIi8
  297. # else
  298. # define KWIML_INT_PRIi8 "i"
  299. # endif
  300. #endif
  301. #if !defined(KWIML_INT_SCNi8)
  302. # if defined(KWIML_INT_HAVE_INT8_T) && defined(SCNi8) \
  303. && !defined(KWIML_INT_BROKEN_SCNi8)
  304. # define KWIML_INT_SCNi8 SCNi8
  305. # elif !defined(KWIML_INT_private_NO_SCN8)
  306. # define KWIML_INT_SCNi8 "hhi"
  307. # endif
  308. #endif
  309. /* 8-bit o, u, x, X */
  310. #if !defined(KWIML_INT_PRIo8)
  311. # if defined(KWIML_INT_HAVE_UINT8_T) && defined(PRIo8) \
  312. && !defined(KWIML_INT_BROKEN_PRIo8)
  313. # define KWIML_INT_PRIo8 PRIo8
  314. # else
  315. # define KWIML_INT_PRIo8 "o"
  316. # endif
  317. #endif
  318. #if !defined(KWIML_INT_SCNo8)
  319. # if defined(KWIML_INT_HAVE_UINT8_T) && defined(SCNo8) \
  320. && !defined(KWIML_INT_BROKEN_SCNo8)
  321. # define KWIML_INT_SCNo8 SCNo8
  322. # elif !defined(KWIML_INT_private_NO_SCN8)
  323. # define KWIML_INT_SCNo8 "hho"
  324. # endif
  325. #endif
  326. #if !defined(KWIML_INT_PRIu8)
  327. # if defined(KWIML_INT_HAVE_UINT8_T) && defined(PRIu8) \
  328. && !defined(KWIML_INT_BROKEN_PRIu8)
  329. # define KWIML_INT_PRIu8 PRIu8
  330. # else
  331. # define KWIML_INT_PRIu8 "u"
  332. # endif
  333. #endif
  334. #if !defined(KWIML_INT_SCNu8)
  335. # if defined(KWIML_INT_HAVE_UINT8_T) && defined(SCNu8) \
  336. && !defined(KWIML_INT_BROKEN_SCNu8)
  337. # define KWIML_INT_SCNu8 SCNu8
  338. # elif !defined(KWIML_INT_private_NO_SCN8)
  339. # define KWIML_INT_SCNu8 "hhu"
  340. # endif
  341. #endif
  342. #if !defined(KWIML_INT_PRIx8)
  343. # if defined(KWIML_INT_HAVE_UINT8_T) && defined(PRIx8) \
  344. && !defined(KWIML_INT_BROKEN_PRIx8)
  345. # define KWIML_INT_PRIx8 PRIx8
  346. # else
  347. # define KWIML_INT_PRIx8 "x"
  348. # endif
  349. #endif
  350. #if !defined(KWIML_INT_SCNx8)
  351. # if defined(KWIML_INT_HAVE_UINT8_T) && defined(SCNx8) \
  352. && !defined(KWIML_INT_BROKEN_SCNx8)
  353. # define KWIML_INT_SCNx8 SCNx8
  354. # elif !defined(KWIML_INT_private_NO_SCN8)
  355. # define KWIML_INT_SCNx8 "hhx"
  356. # endif
  357. #endif
  358. #if !defined(KWIML_INT_PRIX8)
  359. # if defined(KWIML_INT_HAVE_UINT8_T) && defined(PRIX8) \
  360. && !defined(KWIML_INT_BROKEN_PRIX8)
  361. # define KWIML_INT_PRIX8 PRIX8
  362. # else
  363. # define KWIML_INT_PRIX8 "X"
  364. # endif
  365. #endif
  366. /* 8-bit constants */
  367. #if !defined(KWIML_INT_INT8_C)
  368. # if defined(INT8_C) && !defined(KWIML_INT_BROKEN_INT8_C)
  369. # define KWIML_INT_INT8_C(c) INT8_C(c)
  370. # else
  371. # define KWIML_INT_INT8_C(c) c
  372. # endif
  373. #endif
  374. #if !defined(KWIML_INT_UINT8_C)
  375. # if defined(UINT8_C) && !defined(KWIML_INT_BROKEN_UINT8_C)
  376. # define KWIML_INT_UINT8_C(c) UINT8_C(c)
  377. # else
  378. # define KWIML_INT_UINT8_C(c) c ## u
  379. # endif
  380. #endif
  381. /*--------------------------------------------------------------------------*/
  382. #if !defined(KWIML_INT_int16_t)
  383. # if defined(KWIML_INT_HAVE_INT16_T)
  384. # define KWIML_INT_int16_t KWIML_INT_detail_GLOBAL_NS(int16_t)
  385. # else
  386. # define KWIML_INT_int16_t signed short
  387. # endif
  388. #endif
  389. #if !defined(KWIML_INT_uint16_t)
  390. # if defined(KWIML_INT_HAVE_UINT16_T)
  391. # define KWIML_INT_uint16_t KWIML_INT_detail_GLOBAL_NS(uint16_t)
  392. # else
  393. # define KWIML_INT_uint16_t unsigned short
  394. # endif
  395. #endif
  396. /* 16-bit d, i */
  397. #if !defined(KWIML_INT_PRId16)
  398. # if defined(KWIML_INT_HAVE_INT16_T) && defined(PRId16) \
  399. && !defined(KWIML_INT_BROKEN_PRId16)
  400. # define KWIML_INT_PRId16 PRId16
  401. # else
  402. # define KWIML_INT_PRId16 "d"
  403. # endif
  404. #endif
  405. #if !defined(KWIML_INT_SCNd16)
  406. # if defined(KWIML_INT_HAVE_INT16_T) && defined(SCNd16) \
  407. && !defined(KWIML_INT_BROKEN_SCNd16)
  408. # define KWIML_INT_SCNd16 SCNd16
  409. # else
  410. # define KWIML_INT_SCNd16 "hd"
  411. # endif
  412. #endif
  413. #if !defined(KWIML_INT_PRIi16)
  414. # if defined(KWIML_INT_HAVE_INT16_T) && defined(PRIi16) \
  415. && !defined(KWIML_INT_BROKEN_PRIi16)
  416. # define KWIML_INT_PRIi16 PRIi16
  417. # else
  418. # define KWIML_INT_PRIi16 "i"
  419. # endif
  420. #endif
  421. #if !defined(KWIML_INT_SCNi16)
  422. # if defined(KWIML_INT_HAVE_INT16_T) && defined(SCNi16) \
  423. && !defined(KWIML_INT_BROKEN_SCNi16)
  424. # define KWIML_INT_SCNi16 SCNi16
  425. # else
  426. # define KWIML_INT_SCNi16 "hi"
  427. # endif
  428. #endif
  429. /* 16-bit o, u, x, X */
  430. #if !defined(KWIML_INT_PRIo16)
  431. # if defined(KWIML_INT_HAVE_UINT16_T) && defined(PRIo16) \
  432. && !defined(KWIML_INT_BROKEN_PRIo16)
  433. # define KWIML_INT_PRIo16 PRIo16
  434. # else
  435. # define KWIML_INT_PRIo16 "o"
  436. # endif
  437. #endif
  438. #if !defined(KWIML_INT_SCNo16)
  439. # if defined(KWIML_INT_HAVE_UINT16_T) && defined(SCNo16) \
  440. && !defined(KWIML_INT_BROKEN_SCNo16)
  441. # define KWIML_INT_SCNo16 SCNo16
  442. # else
  443. # define KWIML_INT_SCNo16 "ho"
  444. # endif
  445. #endif
  446. #if !defined(KWIML_INT_PRIu16)
  447. # if defined(KWIML_INT_HAVE_UINT16_T) && defined(PRIu16) \
  448. && !defined(KWIML_INT_BROKEN_PRIu16)
  449. # define KWIML_INT_PRIu16 PRIu16
  450. # else
  451. # define KWIML_INT_PRIu16 "u"
  452. # endif
  453. #endif
  454. #if !defined(KWIML_INT_SCNu16)
  455. # if defined(KWIML_INT_HAVE_UINT16_T) && defined(SCNu16) \
  456. && !defined(KWIML_INT_BROKEN_SCNu16)
  457. # define KWIML_INT_SCNu16 SCNu16
  458. # else
  459. # define KWIML_INT_SCNu16 "hu"
  460. # endif
  461. #endif
  462. #if !defined(KWIML_INT_PRIx16)
  463. # if defined(KWIML_INT_HAVE_UINT16_T) && defined(PRIx16) \
  464. && !defined(KWIML_INT_BROKEN_PRIx16)
  465. # define KWIML_INT_PRIx16 PRIx16
  466. # else
  467. # define KWIML_INT_PRIx16 "x"
  468. # endif
  469. #endif
  470. #if !defined(KWIML_INT_SCNx16)
  471. # if defined(KWIML_INT_HAVE_UINT16_T) && defined(SCNx16) \
  472. && !defined(KWIML_INT_BROKEN_SCNx16)
  473. # define KWIML_INT_SCNx16 SCNx16
  474. # else
  475. # define KWIML_INT_SCNx16 "hx"
  476. # endif
  477. #endif
  478. #if !defined(KWIML_INT_PRIX16)
  479. # if defined(KWIML_INT_HAVE_UINT16_T) && defined(PRIX16) \
  480. && !defined(KWIML_INT_BROKEN_PRIX16)
  481. # define KWIML_INT_PRIX16 PRIX16
  482. # else
  483. # define KWIML_INT_PRIX16 "X"
  484. # endif
  485. #endif
  486. /* 16-bit constants */
  487. #if !defined(KWIML_INT_INT16_C)
  488. # if defined(INT16_C) && !defined(KWIML_INT_BROKEN_INT16_C)
  489. # define KWIML_INT_INT16_C(c) INT16_C(c)
  490. # else
  491. # define KWIML_INT_INT16_C(c) c
  492. # endif
  493. #endif
  494. #if !defined(KWIML_INT_UINT16_C)
  495. # if defined(UINT16_C) && !defined(KWIML_INT_BROKEN_UINT16_C)
  496. # define KWIML_INT_UINT16_C(c) UINT16_C(c)
  497. # else
  498. # define KWIML_INT_UINT16_C(c) c ## u
  499. # endif
  500. #endif
  501. /*--------------------------------------------------------------------------*/
  502. #if !defined(KWIML_INT_int32_t)
  503. # if defined(KWIML_INT_HAVE_INT32_T)
  504. # define KWIML_INT_int32_t KWIML_INT_detail_GLOBAL_NS(int32_t)
  505. # else
  506. # define KWIML_INT_int32_t signed int
  507. # endif
  508. #endif
  509. #if !defined(KWIML_INT_uint32_t)
  510. # if defined(KWIML_INT_HAVE_UINT32_T)
  511. # define KWIML_INT_uint32_t KWIML_INT_detail_GLOBAL_NS(uint32_t)
  512. # else
  513. # define KWIML_INT_uint32_t unsigned int
  514. # endif
  515. #endif
  516. /* 32-bit d, i */
  517. #if !defined(KWIML_INT_PRId32)
  518. # if defined(KWIML_INT_HAVE_INT32_T) && defined(PRId32) \
  519. && !defined(KWIML_INT_BROKEN_PRId32)
  520. # define KWIML_INT_PRId32 PRId32
  521. # else
  522. # define KWIML_INT_PRId32 "d"
  523. # endif
  524. #endif
  525. #if !defined(KWIML_INT_SCNd32)
  526. # if defined(KWIML_INT_HAVE_INT32_T) && defined(SCNd32) \
  527. && !defined(KWIML_INT_BROKEN_SCNd32)
  528. # define KWIML_INT_SCNd32 SCNd32
  529. # else
  530. # define KWIML_INT_SCNd32 "d"
  531. # endif
  532. #endif
  533. #if !defined(KWIML_INT_PRIi32)
  534. # if defined(KWIML_INT_HAVE_INT32_T) && defined(PRIi32) \
  535. && !defined(KWIML_INT_BROKEN_PRIi32)
  536. # define KWIML_INT_PRIi32 PRIi32
  537. # else
  538. # define KWIML_INT_PRIi32 "i"
  539. # endif
  540. #endif
  541. #if !defined(KWIML_INT_SCNi32)
  542. # if defined(KWIML_INT_HAVE_INT32_T) && defined(SCNi32) \
  543. && !defined(KWIML_INT_BROKEN_SCNi32)
  544. # define KWIML_INT_SCNi32 SCNi32
  545. # else
  546. # define KWIML_INT_SCNi32 "i"
  547. # endif
  548. #endif
  549. /* 32-bit o, u, x, X */
  550. #if !defined(KWIML_INT_PRIo32)
  551. # if defined(KWIML_INT_HAVE_UINT32_T) && defined(PRIo32) \
  552. && !defined(KWIML_INT_BROKEN_PRIo32)
  553. # define KWIML_INT_PRIo32 PRIo32
  554. # else
  555. # define KWIML_INT_PRIo32 "o"
  556. # endif
  557. #endif
  558. #if !defined(KWIML_INT_SCNo32)
  559. # if defined(KWIML_INT_HAVE_UINT32_T) && defined(SCNo32) \
  560. && !defined(KWIML_INT_BROKEN_SCNo32)
  561. # define KWIML_INT_SCNo32 SCNo32
  562. # else
  563. # define KWIML_INT_SCNo32 "o"
  564. # endif
  565. #endif
  566. #if !defined(KWIML_INT_PRIu32)
  567. # if defined(KWIML_INT_HAVE_UINT32_T) && defined(PRIu32) \
  568. && !defined(KWIML_INT_BROKEN_PRIu32)
  569. # define KWIML_INT_PRIu32 PRIu32
  570. # else
  571. # define KWIML_INT_PRIu32 "u"
  572. # endif
  573. #endif
  574. #if !defined(KWIML_INT_SCNu32)
  575. # if defined(KWIML_INT_HAVE_UINT32_T) && defined(SCNu32) \
  576. && !defined(KWIML_INT_BROKEN_SCNu32)
  577. # define KWIML_INT_SCNu32 SCNu32
  578. # else
  579. # define KWIML_INT_SCNu32 "u"
  580. # endif
  581. #endif
  582. #if !defined(KWIML_INT_PRIx32)
  583. # if defined(KWIML_INT_HAVE_UINT32_T) && defined(PRIx32) \
  584. && !defined(KWIML_INT_BROKEN_PRIx32)
  585. # define KWIML_INT_PRIx32 PRIx32
  586. # else
  587. # define KWIML_INT_PRIx32 "x"
  588. # endif
  589. #endif
  590. #if !defined(KWIML_INT_SCNx32)
  591. # if defined(KWIML_INT_HAVE_UINT32_T) && defined(SCNx32) \
  592. && !defined(KWIML_INT_BROKEN_SCNx32)
  593. # define KWIML_INT_SCNx32 SCNx32
  594. # else
  595. # define KWIML_INT_SCNx32 "x"
  596. # endif
  597. #endif
  598. #if !defined(KWIML_INT_PRIX32)
  599. # if defined(KWIML_INT_HAVE_UINT32_T) && defined(PRIX32) \
  600. && !defined(KWIML_INT_BROKEN_PRIX32)
  601. # define KWIML_INT_PRIX32 PRIX32
  602. # else
  603. # define KWIML_INT_PRIX32 "X"
  604. # endif
  605. #endif
  606. #if defined(__hpux) && defined(__GNUC__) && !defined(__LP64__) \
  607. && defined(__CONCAT__) && defined(__CONCAT_U__)
  608. /* Some HPs define UINT32_C incorrectly and break GNU. */
  609. # define KWIML_INT_BROKEN_UINT32_C 1
  610. #endif
  611. /* 32-bit constants */
  612. #if !defined(KWIML_INT_INT32_C)
  613. # if defined(INT32_C) && !defined(KWIML_INT_BROKEN_INT32_C)
  614. # define KWIML_INT_INT32_C(c) INT32_C(c)
  615. # else
  616. # define KWIML_INT_INT32_C(c) c
  617. # endif
  618. #endif
  619. #if !defined(KWIML_INT_UINT32_C)
  620. # if defined(UINT32_C) && !defined(KWIML_INT_BROKEN_UINT32_C)
  621. # define KWIML_INT_UINT32_C(c) UINT32_C(c)
  622. # else
  623. # define KWIML_INT_UINT32_C(c) c ## u
  624. # endif
  625. #endif
  626. /*--------------------------------------------------------------------------*/
  627. #if !defined(KWIML_INT_int64_t) && !defined(KWIML_INT_NO_INT64_T)
  628. # if defined(KWIML_INT_HAVE_INT64_T)
  629. # define KWIML_INT_int64_t KWIML_INT_detail_GLOBAL_NS(int64_t)
  630. # elif KWIML_ABI_SIZEOF_LONG == 8
  631. # define KWIML_INT_int64_t signed long
  632. # elif defined(KWIML_ABI_SIZEOF_LONG_LONG) && KWIML_ABI_SIZEOF_LONG_LONG == 8
  633. # define KWIML_INT_int64_t signed long long
  634. # elif defined(KWIML_ABI_SIZEOF___INT64)
  635. # define KWIML_INT_int64_t signed __int64
  636. # elif defined(KWIML_INT_NO_ERROR_INT64_T)
  637. # define KWIML_INT_NO_INT64_T
  638. # else
  639. # error "No type known for 'int64_t'."
  640. # endif
  641. #endif
  642. #if !defined(KWIML_INT_uint64_t) && !defined(KWIML_INT_NO_UINT64_T)
  643. # if defined(KWIML_INT_HAVE_UINT64_T)
  644. # define KWIML_INT_uint64_t KWIML_INT_detail_GLOBAL_NS(uint64_t)
  645. # elif KWIML_ABI_SIZEOF_LONG == 8
  646. # define KWIML_INT_uint64_t unsigned long
  647. # elif defined(KWIML_ABI_SIZEOF_LONG_LONG) && KWIML_ABI_SIZEOF_LONG_LONG == 8
  648. # define KWIML_INT_uint64_t unsigned long long
  649. # elif defined(KWIML_ABI_SIZEOF___INT64)
  650. # define KWIML_INT_uint64_t unsigned __int64
  651. # elif defined(KWIML_INT_NO_ERROR_UINT64_T)
  652. # define KWIML_INT_NO_UINT64_T
  653. # else
  654. # error "No type known for 'uint64_t'."
  655. # endif
  656. #endif
  657. #if defined(__INTEL_COMPILER)
  658. #elif defined(__BORLANDC__)
  659. # define KWIML_INT_private_NO_FMTLL /* type 'long long' but not 'll' format */
  660. # define KWIML_INT_BROKEN_INT64_C 1 /* system macro defined incorrectly */
  661. # define KWIML_INT_BROKEN_UINT64_C 1 /* system macro defined incorrectly */
  662. #elif defined(_MSC_VER) && _MSC_VER < 1400
  663. # define KWIML_INT_private_NO_FMTLL /* type 'long long' but not 'll' format */
  664. #endif
  665. #if !defined(KWIML_INT_detail_FMT64)
  666. # if KWIML_ABI_SIZEOF_LONG == 8
  667. # define KWIML_INT_detail_FMT64 "l"
  668. # elif defined(KWIML_ABI_SIZEOF_LONG_LONG) && KWIML_ABI_SIZEOF_LONG_LONG == 8
  669. # if !defined(KWIML_INT_private_NO_FMTLL)
  670. # define KWIML_INT_detail_FMT64 "ll"
  671. # else
  672. # define KWIML_INT_detail_FMT64 "I64"
  673. # endif
  674. # elif defined(KWIML_ABI_SIZEOF___INT64)
  675. # if defined(__BORLANDC__)
  676. # define KWIML_INT_detail_FMT64 "L"
  677. # else
  678. # define KWIML_INT_detail_FMT64 "I64"
  679. # endif
  680. # endif
  681. #endif
  682. #undef KWIML_INT_private_NO_FMTLL
  683. /* 64-bit d, i */
  684. #if !defined(KWIML_INT_PRId64)
  685. # if defined(KWIML_INT_HAVE_INT64_T) && defined(PRId64) \
  686. && !defined(KWIML_INT_BROKEN_PRId64)
  687. # define KWIML_INT_PRId64 PRId64
  688. # elif defined(KWIML_INT_detail_FMT64)
  689. # define KWIML_INT_PRId64 KWIML_INT_detail_FMT64 "d"
  690. # endif
  691. #endif
  692. #if !defined(KWIML_INT_SCNd64)
  693. # if defined(KWIML_INT_HAVE_INT64_T) && defined(SCNd64) \
  694. && !defined(KWIML_INT_BROKEN_SCNd64)
  695. # define KWIML_INT_SCNd64 SCNd64
  696. # elif defined(KWIML_INT_detail_FMT64) && !defined(KWIML_INT_private_NO_SCN64)
  697. # define KWIML_INT_SCNd64 KWIML_INT_detail_FMT64 "d"
  698. # endif
  699. #endif
  700. #if !defined(KWIML_INT_PRIi64)
  701. # if defined(KWIML_INT_HAVE_INT64_T) && defined(PRIi64) \
  702. && !defined(KWIML_INT_BROKEN_PRIi64)
  703. # define KWIML_INT_PRIi64 PRIi64
  704. # elif defined(KWIML_INT_detail_FMT64)
  705. # define KWIML_INT_PRIi64 KWIML_INT_detail_FMT64 "d"
  706. # endif
  707. #endif
  708. #if !defined(KWIML_INT_SCNi64)
  709. # if defined(KWIML_INT_HAVE_INT64_T) && defined(SCNi64) \
  710. && !defined(KWIML_INT_BROKEN_SCNi64)
  711. # define KWIML_INT_SCNi64 SCNi64
  712. # elif defined(KWIML_INT_detail_FMT64) && !defined(KWIML_INT_private_NO_SCN64)
  713. # define KWIML_INT_SCNi64 KWIML_INT_detail_FMT64 "d"
  714. # endif
  715. #endif
  716. /* 64-bit o, u, x, X */
  717. #if !defined(KWIML_INT_PRIo64)
  718. # if defined(KWIML_INT_HAVE_UINT64_T) && defined(PRIo64) \
  719. && !defined(KWIML_INT_BROKEN_PRIo64)
  720. # define KWIML_INT_PRIo64 PRIo64
  721. # elif defined(KWIML_INT_detail_FMT64)
  722. # define KWIML_INT_PRIo64 KWIML_INT_detail_FMT64 "o"
  723. # endif
  724. #endif
  725. #if !defined(KWIML_INT_SCNo64)
  726. # if defined(KWIML_INT_HAVE_UINT64_T) && defined(SCNo64) \
  727. && !defined(KWIML_INT_BROKEN_SCNo64)
  728. # define KWIML_INT_SCNo64 SCNo64
  729. # elif defined(KWIML_INT_detail_FMT64) && !defined(KWIML_INT_private_NO_SCN64)
  730. # define KWIML_INT_SCNo64 KWIML_INT_detail_FMT64 "o"
  731. # endif
  732. #endif
  733. #if !defined(KWIML_INT_PRIu64)
  734. # if defined(KWIML_INT_HAVE_UINT64_T) && defined(PRIu64) \
  735. && !defined(KWIML_INT_BROKEN_PRIu64)
  736. # define KWIML_INT_PRIu64 PRIu64
  737. # elif defined(KWIML_INT_detail_FMT64)
  738. # define KWIML_INT_PRIu64 KWIML_INT_detail_FMT64 "u"
  739. # endif
  740. #endif
  741. #if !defined(KWIML_INT_SCNu64)
  742. # if defined(KWIML_INT_HAVE_UINT64_T) && defined(SCNu64) \
  743. && !defined(KWIML_INT_BROKEN_SCNu64)
  744. # define KWIML_INT_SCNu64 SCNu64
  745. # elif defined(KWIML_INT_detail_FMT64) && !defined(KWIML_INT_private_NO_SCN64)
  746. # define KWIML_INT_SCNu64 KWIML_INT_detail_FMT64 "u"
  747. # endif
  748. #endif
  749. #if !defined(KWIML_INT_PRIx64)
  750. # if defined(KWIML_INT_HAVE_UINT64_T) && defined(PRIx64) \
  751. && !defined(KWIML_INT_BROKEN_PRIx64)
  752. # define KWIML_INT_PRIx64 PRIx64
  753. # elif defined(KWIML_INT_detail_FMT64)
  754. # define KWIML_INT_PRIx64 KWIML_INT_detail_FMT64 "x"
  755. # endif
  756. #endif
  757. #if !defined(KWIML_INT_SCNx64)
  758. # if defined(KWIML_INT_HAVE_UINT64_T) && defined(SCNx64) \
  759. && !defined(KWIML_INT_BROKEN_SCNx64)
  760. # define KWIML_INT_SCNx64 SCNx64
  761. # elif defined(KWIML_INT_detail_FMT64) && !defined(KWIML_INT_private_NO_SCN64)
  762. # define KWIML_INT_SCNx64 KWIML_INT_detail_FMT64 "x"
  763. # endif
  764. #endif
  765. #if !defined(KWIML_INT_PRIX64)
  766. # if defined(KWIML_INT_HAVE_UINT64_T) && defined(PRIX64) \
  767. && !defined(KWIML_INT_BROKEN_PRIX64)
  768. # define KWIML_INT_PRIX64 PRIX64
  769. # elif defined(KWIML_INT_detail_FMT64)
  770. # define KWIML_INT_PRIX64 KWIML_INT_detail_FMT64 "X"
  771. # endif
  772. #endif
  773. /* 64-bit constants */
  774. #if !defined(KWIML_INT_INT64_C)
  775. # if defined(KWIML_INT_HAVE_INT64_T) && defined(INT64_C) \
  776. && !defined(KWIML_INT_BROKEN_INT64_C)
  777. # define KWIML_INT_INT64_C(c) INT64_C(c)
  778. # elif KWIML_ABI_SIZEOF_LONG == 8
  779. # define KWIML_INT_INT64_C(c) c ## l
  780. # elif defined(KWIML_ABI_SIZEOF_LONG_LONG) && KWIML_ABI_SIZEOF_LONG_LONG == 8
  781. # define KWIML_INT_INT64_C(c) c ## ll
  782. # elif defined(KWIML_ABI_SIZEOF___INT64)
  783. # define KWIML_INT_INT64_C(c) c ## i64
  784. # endif
  785. #endif
  786. #if !defined(KWIML_INT_UINT64_C)
  787. # if defined(KWIML_INT_HAVE_UINT64_T) && defined(UINT64_C) \
  788. && !defined(KWIML_INT_BROKEN_UINT64_C)
  789. # define KWIML_INT_UINT64_C(c) UINT64_C(c)
  790. # elif KWIML_ABI_SIZEOF_LONG == 8
  791. # define KWIML_INT_UINT64_C(c) c ## ul
  792. # elif defined(KWIML_ABI_SIZEOF_LONG_LONG) && KWIML_ABI_SIZEOF_LONG_LONG == 8
  793. # define KWIML_INT_UINT64_C(c) c ## ull
  794. # elif defined(KWIML_ABI_SIZEOF___INT64)
  795. # define KWIML_INT_UINT64_C(c) c ## ui64
  796. # endif
  797. #endif
  798. /*--------------------------------------------------------------------------*/
  799. #if !defined(KWIML_INT_intptr_t) && !defined(KWIML_INT_NO_INTPTR_T)
  800. # if defined(KWIML_INT_HAVE_INTPTR_T)
  801. # define KWIML_INT_intptr_t KWIML_INT_detail_GLOBAL_NS(intptr_t)
  802. # elif KWIML_ABI_SIZEOF_DATA_PTR == 4
  803. # define KWIML_INT_intptr_t KWIML_INT_int32_t
  804. # elif !defined(KWIML_INT_NO_INT64_T)
  805. # define KWIML_INT_intptr_t KWIML_INT_int64_t
  806. # elif defined(KWIML_INT_NO_ERROR_INTPTR_T)
  807. # define KWIML_INT_NO_INTPTR_T
  808. # else
  809. # error "No type known for 'intptr_t'."
  810. # endif
  811. #endif
  812. #if !defined(KWIML_INT_uintptr_t) && !defined(KWIML_INT_NO_UINTPTR_T)
  813. # if defined(KWIML_INT_HAVE_UINTPTR_T)
  814. # define KWIML_INT_uintptr_t KWIML_INT_detail_GLOBAL_NS(uintptr_t)
  815. # elif KWIML_ABI_SIZEOF_DATA_PTR == 4
  816. # define KWIML_INT_uintptr_t KWIML_INT_uint32_t
  817. # elif !defined(KWIML_INT_NO_UINT64_T)
  818. # define KWIML_INT_uintptr_t KWIML_INT_uint64_t
  819. # elif defined(KWIML_INT_NO_ERROR_UINTPTR_T)
  820. # define KWIML_INT_NO_UINTPTR_T
  821. # else
  822. # error "No type known for 'uintptr_t'."
  823. # endif
  824. #endif
  825. #if !defined(KWIML_INT_PRIdPTR)
  826. # if defined(KWIML_INT_HAVE_INTPTR_T) && defined(PRIdPTR) \
  827. && !defined(KWIML_INT_BROKEN_PRIdPTR)
  828. # define KWIML_INT_PRIdPTR PRIdPTR
  829. # elif KWIML_ABI_SIZEOF_DATA_PTR == 4
  830. # define KWIML_INT_PRIdPTR KWIML_INT_PRId32
  831. # elif !defined(KWIML_INT_NO_UINT64_T)
  832. # define KWIML_INT_PRIdPTR KWIML_INT_PRId64
  833. # endif
  834. #endif
  835. #if !defined(KWIML_INT_SCNdPTR)
  836. # if defined(KWIML_INT_HAVE_INTPTR_T) && defined(SCNdPTR) \
  837. && !defined(KWIML_INT_BROKEN_SCNdPTR)
  838. # define KWIML_INT_SCNdPTR SCNdPTR
  839. # elif KWIML_ABI_SIZEOF_DATA_PTR == 4
  840. # define KWIML_INT_SCNdPTR KWIML_INT_SCNd32
  841. # elif !defined(KWIML_INT_NO_UINT64_T)
  842. # define KWIML_INT_SCNdPTR KWIML_INT_SCNd64
  843. # endif
  844. #endif
  845. #if !defined(KWIML_INT_PRIiPTR)
  846. # if defined(KWIML_INT_HAVE_INTPTR_T) && defined(PRIiPTR) \
  847. && !defined(KWIML_INT_BROKEN_PRIiPTR)
  848. # define KWIML_INT_PRIiPTR PRIiPTR
  849. # elif KWIML_ABI_SIZEOF_DATA_PTR == 4
  850. # define KWIML_INT_PRIiPTR KWIML_INT_PRIi32
  851. # elif !defined(KWIML_INT_NO_UINT64_T)
  852. # define KWIML_INT_PRIiPTR KWIML_INT_PRIi64
  853. # endif
  854. #endif
  855. #if !defined(KWIML_INT_SCNiPTR)
  856. # if defined(KWIML_INT_HAVE_INTPTR_T) && defined(SCNiPTR) \
  857. && !defined(KWIML_INT_BROKEN_SCNiPTR)
  858. # define KWIML_INT_SCNiPTR SCNiPTR
  859. # elif KWIML_ABI_SIZEOF_DATA_PTR == 4
  860. # define KWIML_INT_SCNiPTR KWIML_INT_SCNi32
  861. # elif !defined(KWIML_INT_NO_UINT64_T)
  862. # define KWIML_INT_SCNiPTR KWIML_INT_SCNi64
  863. # endif
  864. #endif
  865. #if !defined(KWIML_INT_PRIoPTR)
  866. # if defined(KWIML_INT_HAVE_UINTPTR_T) && defined(PRIoPTR) \
  867. && !defined(KWIML_INT_BROKEN_PRIoPTR)
  868. # define KWIML_INT_PRIoPTR PRIoPTR
  869. # elif KWIML_ABI_SIZEOF_DATA_PTR == 4
  870. # define KWIML_INT_PRIoPTR KWIML_INT_PRIo32
  871. # elif !defined(KWIML_INT_NO_UINT64_T)
  872. # define KWIML_INT_PRIoPTR KWIML_INT_PRIo64
  873. # endif
  874. #endif
  875. #if !defined(KWIML_INT_SCNoPTR)
  876. # if defined(KWIML_INT_HAVE_UINTPTR_T) && defined(SCNoPTR) \
  877. && !defined(KWIML_INT_BROKEN_SCNoPTR)
  878. # define KWIML_INT_SCNoPTR SCNoPTR
  879. # elif KWIML_ABI_SIZEOF_DATA_PTR == 4
  880. # define KWIML_INT_SCNoPTR KWIML_INT_SCNo32
  881. # elif !defined(KWIML_INT_NO_UINT64_T)
  882. # define KWIML_INT_SCNoPTR KWIML_INT_SCNo64
  883. # endif
  884. #endif
  885. #if !defined(KWIML_INT_PRIuPTR)
  886. # if defined(KWIML_INT_HAVE_UINTPTR_T) && defined(PRIuPTR) \
  887. && !defined(KWIML_INT_BROKEN_PRIuPTR)
  888. # define KWIML_INT_PRIuPTR PRIuPTR
  889. # elif KWIML_ABI_SIZEOF_DATA_PTR == 4
  890. # define KWIML_INT_PRIuPTR KWIML_INT_PRIu32
  891. # elif !defined(KWIML_INT_NO_UINT64_T)
  892. # define KWIML_INT_PRIuPTR KWIML_INT_PRIu64
  893. # endif
  894. #endif
  895. #if !defined(KWIML_INT_SCNuPTR)
  896. # if defined(KWIML_INT_HAVE_UINTPTR_T) && defined(SCNuPTR) \
  897. && !defined(KWIML_INT_BROKEN_SCNuPTR)
  898. # define KWIML_INT_SCNuPTR SCNuPTR
  899. # elif KWIML_ABI_SIZEOF_DATA_PTR == 4
  900. # define KWIML_INT_SCNuPTR KWIML_INT_SCNu32
  901. # elif !defined(KWIML_INT_NO_UINT64_T)
  902. # define KWIML_INT_SCNuPTR KWIML_INT_SCNu64
  903. # endif
  904. #endif
  905. #if !defined(KWIML_INT_PRIxPTR)
  906. # if defined(KWIML_INT_HAVE_UINTPTR_T) && defined(PRIxPTR) \
  907. && !defined(KWIML_INT_BROKEN_PRIxPTR)
  908. # define KWIML_INT_PRIxPTR PRIxPTR
  909. # elif KWIML_ABI_SIZEOF_DATA_PTR == 4
  910. # define KWIML_INT_PRIxPTR KWIML_INT_PRIx32
  911. # elif !defined(KWIML_INT_NO_UINT64_T)
  912. # define KWIML_INT_PRIxPTR KWIML_INT_PRIx64
  913. # endif
  914. #endif
  915. #if !defined(KWIML_INT_SCNxPTR)
  916. # if defined(KWIML_INT_HAVE_UINTPTR_T) && defined(SCNxPTR) \
  917. && !defined(KWIML_INT_BROKEN_SCNxPTR)
  918. # define KWIML_INT_SCNxPTR SCNxPTR
  919. # elif KWIML_ABI_SIZEOF_DATA_PTR == 4
  920. # define KWIML_INT_SCNxPTR KWIML_INT_SCNx32
  921. # elif !defined(KWIML_INT_NO_UINT64_T)
  922. # define KWIML_INT_SCNxPTR KWIML_INT_SCNx64
  923. # endif
  924. #endif
  925. #if !defined(KWIML_INT_PRIXPTR)
  926. # if defined(KWIML_INT_HAVE_UINTPTR_T) && defined(PRIXPTR) \
  927. && !defined(KWIML_INT_BROKEN_PRIXPTR)
  928. # define KWIML_INT_PRIXPTR PRIXPTR
  929. # elif KWIML_ABI_SIZEOF_DATA_PTR == 4
  930. # define KWIML_INT_PRIXPTR KWIML_INT_PRIX32
  931. # elif !defined(KWIML_INT_NO_UINT64_T)
  932. # define KWIML_INT_PRIXPTR KWIML_INT_PRIX64
  933. # endif
  934. #endif
  935. #undef KWIML_INT_private_NO_SCN64
  936. #undef KWIML_INT_private_NO_SCN8
  937. #endif /* KWIML_INT_private_DO_DEFINE */
  938. /*--------------------------------------------------------------------------*/
  939. #ifdef KWIML_INT_private_DO_VERIFY
  940. #undef KWIML_INT_private_DO_VERIFY
  941. #if defined(_MSC_VER)
  942. # pragma warning (push)
  943. # pragma warning (disable:4309) /* static_cast trunction of constant value */
  944. # pragma warning (disable:4310) /* cast truncates constant value */
  945. #endif
  946. #if defined(__cplusplus) && !defined(__BORLANDC__)
  947. #define KWIML_INT_private_STATIC_CAST(t,v) static_cast<t>(v)
  948. #else
  949. #define KWIML_INT_private_STATIC_CAST(t,v) (t)(v)
  950. #endif
  951. #define KWIML_INT_private_VERIFY(n, x, y) KWIML_INT_private_VERIFY_0(KWIML_INT_private_VERSION, n, x, y)
  952. #define KWIML_INT_private_VERIFY_0(V, n, x, y) KWIML_INT_private_VERIFY_1(V, n, x, y)
  953. #define KWIML_INT_private_VERIFY_1(V, n, x, y) extern int (*n##_v##V)[x]; extern int (*n##_v##V)[y]
  954. #define KWIML_INT_private_VERIFY_BOOL(m, b) KWIML_INT_private_VERIFY(KWIML_INT_detail_VERIFY_##m, 2, (b)?2:3)
  955. #define KWIML_INT_private_VERIFY_TYPE(t, s) KWIML_INT_private_VERIFY(KWIML_INT_detail_VERIFY_##t, s, sizeof(t))
  956. #define KWIML_INT_private_VERIFY_SIGN(t, u, o) \
  957. KWIML_INT_private_VERIFY_BOOL(SIGN_##t, KWIML_INT_private_STATIC_CAST( \
  958. t, KWIML_INT_private_STATIC_CAST(u, 1) << ((sizeof(t)<<3)-1)) o 0)
  959. KWIML_INT_private_VERIFY_TYPE(KWIML_INT_int8_t, 1);
  960. KWIML_INT_private_VERIFY_TYPE(KWIML_INT_uint8_t, 1);
  961. KWIML_INT_private_VERIFY_TYPE(KWIML_INT_int16_t, 2);
  962. KWIML_INT_private_VERIFY_TYPE(KWIML_INT_uint16_t, 2);
  963. KWIML_INT_private_VERIFY_TYPE(KWIML_INT_int32_t, 4);
  964. KWIML_INT_private_VERIFY_TYPE(KWIML_INT_uint32_t, 4);
  965. #if !defined(KWIML_INT_NO_INT64_T)
  966. KWIML_INT_private_VERIFY_TYPE(KWIML_INT_int64_t, 8);
  967. #endif
  968. #if !defined(KWIML_INT_NO_UINT64_T)
  969. KWIML_INT_private_VERIFY_TYPE(KWIML_INT_uint64_t, 8);
  970. #endif
  971. #if !defined(KWIML_INT_NO_INTPTR_T)
  972. KWIML_INT_private_VERIFY_TYPE(KWIML_INT_intptr_t, sizeof(void*));
  973. #endif
  974. #if !defined(KWIML_INT_NO_UINTPTR_T)
  975. KWIML_INT_private_VERIFY_TYPE(KWIML_INT_uintptr_t, sizeof(void*));
  976. #endif
  977. KWIML_INT_private_VERIFY_SIGN(KWIML_INT_int8_t, KWIML_INT_uint8_t, <);
  978. KWIML_INT_private_VERIFY_SIGN(KWIML_INT_uint8_t, KWIML_INT_uint8_t, >);
  979. KWIML_INT_private_VERIFY_SIGN(KWIML_INT_int16_t, KWIML_INT_uint16_t, <);
  980. KWIML_INT_private_VERIFY_SIGN(KWIML_INT_uint16_t, KWIML_INT_uint16_t, >);
  981. KWIML_INT_private_VERIFY_SIGN(KWIML_INT_int32_t, KWIML_INT_uint32_t, <);
  982. KWIML_INT_private_VERIFY_SIGN(KWIML_INT_uint32_t, KWIML_INT_uint32_t, >);
  983. #if !defined(KWIML_INT_NO_INT64_T)
  984. KWIML_INT_private_VERIFY_SIGN(KWIML_INT_int64_t, KWIML_INT_uint64_t, <);
  985. #endif
  986. #if !defined(KWIML_INT_NO_UINT64_T)
  987. KWIML_INT_private_VERIFY_SIGN(KWIML_INT_uint64_t, KWIML_INT_uint64_t, >);
  988. #endif
  989. #if !defined(KWIML_INT_NO_INTPTR_T)
  990. KWIML_INT_private_VERIFY_SIGN(KWIML_INT_intptr_t, KWIML_INT_uintptr_t, <);
  991. #endif
  992. #if !defined(KWIML_INT_NO_UINTPTR_T)
  993. KWIML_INT_private_VERIFY_SIGN(KWIML_INT_uintptr_t, KWIML_INT_uintptr_t, >);
  994. #endif
  995. #undef KWIML_INT_private_VERIFY_SIGN
  996. #undef KWIML_INT_private_VERIFY_TYPE
  997. #undef KWIML_INT_private_VERIFY_BOOL
  998. #undef KWIML_INT_private_VERIFY_1
  999. #undef KWIML_INT_private_VERIFY_0
  1000. #undef KWIML_INT_private_VERIFY
  1001. #undef KWIML_INT_private_STATIC_CAST
  1002. #if defined(_MSC_VER)
  1003. # pragma warning (pop)
  1004. #endif
  1005. #endif /* KWIML_INT_private_DO_VERIFY */
  1006. #undef KWIML_INT_private_VERSION