1
0

int.h 36 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093
  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. # if _MSC_VER >= 1800
  136. # define KWIML_INT_HAVE_INTTYPES_H 1
  137. # else
  138. # define KWIML_INT_NO_INTTYPES_H 1
  139. # endif
  140. #elif defined(__BORLANDC__) /* Borland */
  141. # define KWIML_INT_NO_INTTYPES_H 1
  142. #elif defined(__WATCOMC__) /* Watcom */
  143. # define KWIML_INT_NO_INTTYPES_H 1
  144. #else /* Assume it exists. */
  145. # define KWIML_INT_HAVE_INTTYPES_H 1
  146. #endif
  147. /*--------------------------------------------------------------------------*/
  148. #if defined(KWIML_INT_HAVE_STDINT_H) && defined(KWIML_INT_NO_STDINT_H)
  149. # error "Both KWIML_INT_HAVE_STDINT_H and KWIML_INT_NO_STDINT_H defined!"
  150. #endif
  151. #if defined(KWIML_INT_HAVE_INTTYPES_H) && defined(KWIML_INT_NO_INTTYPES_H)
  152. # error "Both KWIML_INT_HAVE_INTTYPES_H and KWIML_INT_NO_INTTYPES_H defined!"
  153. #endif
  154. #if defined(KWIML_INT_HAVE_STDINT_H)
  155. # ifndef KWIML_INT_detail_INCLUDED_STDINT_H
  156. # define KWIML_INT_detail_INCLUDED_STDINT_H
  157. # include <stdint.h>
  158. # endif
  159. #endif
  160. #if defined(KWIML_INT_HAVE_INTTYPES_H)
  161. # ifndef KWIML_INT_detail_INCLUDED_INTTYPES_H
  162. # define KWIML_INT_detail_INCLUDED_INTTYPES_H
  163. # if defined(__cplusplus) && !defined(__STDC_FORMAT_MACROS)
  164. # define __STDC_FORMAT_MACROS
  165. # endif
  166. # include <inttypes.h>
  167. # endif
  168. #endif
  169. #if defined(KWIML_INT_HAVE_STDINT_H) || defined(KWIML_INT_HAVE_INTTYPES_H)
  170. #define KWIML_INT_HAVE_INT8_T 1
  171. #define KWIML_INT_HAVE_UINT8_T 1
  172. #define KWIML_INT_HAVE_INT16_T 1
  173. #define KWIML_INT_HAVE_UINT16_T 1
  174. #define KWIML_INT_HAVE_INT32_T 1
  175. #define KWIML_INT_HAVE_UINT32_T 1
  176. #define KWIML_INT_HAVE_INT64_T 1
  177. #define KWIML_INT_HAVE_UINT64_T 1
  178. #define KWIML_INT_HAVE_INTPTR_T 1
  179. #define KWIML_INT_HAVE_UINTPTR_T 1
  180. # if defined(__cplusplus)
  181. # define KWIML_INT_detail_GLOBAL_NS(T) ::T
  182. # else
  183. # define KWIML_INT_detail_GLOBAL_NS(T) T
  184. # endif
  185. #endif
  186. #if defined(_AIX43) && !defined(_AIX50) && !defined(_AIX51)
  187. /* AIX 4.3 defines these incorrectly with % and no quotes. */
  188. # define KWIML_INT_BROKEN_PRId8 1
  189. # define KWIML_INT_BROKEN_SCNd8 1
  190. # define KWIML_INT_BROKEN_PRIi8 1
  191. # define KWIML_INT_BROKEN_SCNi8 1
  192. # define KWIML_INT_BROKEN_PRIo8 1
  193. # define KWIML_INT_BROKEN_SCNo8 1
  194. # define KWIML_INT_BROKEN_PRIu8 1
  195. # define KWIML_INT_BROKEN_SCNu8 1
  196. # define KWIML_INT_BROKEN_PRIx8 1
  197. # define KWIML_INT_BROKEN_SCNx8 1
  198. # define KWIML_INT_BROKEN_PRIX8 1
  199. # define KWIML_INT_BROKEN_PRId16 1
  200. # define KWIML_INT_BROKEN_SCNd16 1
  201. # define KWIML_INT_BROKEN_PRIi16 1
  202. # define KWIML_INT_BROKEN_SCNi16 1
  203. # define KWIML_INT_BROKEN_PRIo16 1
  204. # define KWIML_INT_BROKEN_SCNo16 1
  205. # define KWIML_INT_BROKEN_PRIu16 1
  206. # define KWIML_INT_BROKEN_SCNu16 1
  207. # define KWIML_INT_BROKEN_PRIx16 1
  208. # define KWIML_INT_BROKEN_SCNx16 1
  209. # define KWIML_INT_BROKEN_PRIX16 1
  210. # define KWIML_INT_BROKEN_PRId32 1
  211. # define KWIML_INT_BROKEN_SCNd32 1
  212. # define KWIML_INT_BROKEN_PRIi32 1
  213. # define KWIML_INT_BROKEN_SCNi32 1
  214. # define KWIML_INT_BROKEN_PRIo32 1
  215. # define KWIML_INT_BROKEN_SCNo32 1
  216. # define KWIML_INT_BROKEN_PRIu32 1
  217. # define KWIML_INT_BROKEN_SCNu32 1
  218. # define KWIML_INT_BROKEN_PRIx32 1
  219. # define KWIML_INT_BROKEN_SCNx32 1
  220. # define KWIML_INT_BROKEN_PRIX32 1
  221. # define KWIML_INT_BROKEN_PRId64 1
  222. # define KWIML_INT_BROKEN_SCNd64 1
  223. # define KWIML_INT_BROKEN_PRIi64 1
  224. # define KWIML_INT_BROKEN_SCNi64 1
  225. # define KWIML_INT_BROKEN_PRIo64 1
  226. # define KWIML_INT_BROKEN_SCNo64 1
  227. # define KWIML_INT_BROKEN_PRIu64 1
  228. # define KWIML_INT_BROKEN_SCNu64 1
  229. # define KWIML_INT_BROKEN_PRIx64 1
  230. # define KWIML_INT_BROKEN_SCNx64 1
  231. # define KWIML_INT_BROKEN_PRIX64 1
  232. # define KWIML_INT_BROKEN_PRIdPTR 1
  233. # define KWIML_INT_BROKEN_SCNdPTR 1
  234. # define KWIML_INT_BROKEN_PRIiPTR 1
  235. # define KWIML_INT_BROKEN_SCNiPTR 1
  236. # define KWIML_INT_BROKEN_PRIoPTR 1
  237. # define KWIML_INT_BROKEN_SCNoPTR 1
  238. # define KWIML_INT_BROKEN_PRIuPTR 1
  239. # define KWIML_INT_BROKEN_SCNuPTR 1
  240. # define KWIML_INT_BROKEN_PRIxPTR 1
  241. # define KWIML_INT_BROKEN_SCNxPTR 1
  242. # define KWIML_INT_BROKEN_PRIXPTR 1
  243. #endif
  244. #if defined(_MSC_VER) && _MSC_VER < 1900
  245. /* MSVC scanf seems broken on 8-bit sizes until 19.00 */
  246. # define KWIML_INT_BROKEN_SCNd8 1
  247. # define KWIML_INT_BROKEN_SCNi8 1
  248. # define KWIML_INT_BROKEN_SCNo8 1
  249. # define KWIML_INT_BROKEN_SCNu8 1
  250. # define KWIML_INT_BROKEN_SCNx8 1
  251. #endif
  252. #if (defined(__SUNPRO_C)||defined(__SUNPRO_CC)) && defined(_CHAR_IS_UNSIGNED)
  253. # define KWIML_INT_BROKEN_INT8_T 1 /* system type defined incorrectly */
  254. #elif defined(__BORLANDC__) && defined(_CHAR_UNSIGNED)
  255. # define KWIML_INT_BROKEN_INT8_T 1 /* system type defined incorrectly */
  256. #endif
  257. /*--------------------------------------------------------------------------*/
  258. #if !defined(KWIML_INT_int8_t)
  259. # if defined(KWIML_INT_HAVE_INT8_T) && !defined(KWIML_INT_BROKEN_INT8_T)
  260. # define KWIML_INT_int8_t KWIML_INT_detail_GLOBAL_NS(int8_t)
  261. # else
  262. # define KWIML_INT_int8_t signed char
  263. # endif
  264. #endif
  265. #if !defined(KWIML_INT_uint8_t)
  266. # if defined(KWIML_INT_HAVE_UINT8_T)
  267. # define KWIML_INT_uint8_t KWIML_INT_detail_GLOBAL_NS(uint8_t)
  268. # else
  269. # define KWIML_INT_uint8_t unsigned char
  270. # endif
  271. #endif
  272. #if defined(__INTEL_COMPILER)
  273. # if defined(_WIN32)
  274. # define KWIML_INT_private_NO_SCN8
  275. # endif
  276. #elif defined(__SUNPRO_C) || defined(__SUNPRO_CC)
  277. # define KWIML_INT_private_NO_SCN8
  278. #elif defined(__BORLANDC__)
  279. # define KWIML_INT_private_NO_SCN8
  280. # define KWIML_INT_private_NO_SCN64
  281. #elif defined(_MSC_VER) && _MSC_VER < 1900
  282. # define KWIML_INT_private_NO_SCN8
  283. #elif defined(__WATCOMC__)
  284. # define KWIML_INT_private_NO_SCN8
  285. # elif defined(__hpux) /* HP runtime lacks support (any compiler) */
  286. # define KWIML_INT_private_NO_SCN8
  287. #endif
  288. /* 8-bit d, i */
  289. #if !defined(KWIML_INT_PRId8)
  290. # if defined(KWIML_INT_HAVE_INT8_T) && defined(PRId8) \
  291. && !defined(KWIML_INT_BROKEN_PRId8)
  292. # define KWIML_INT_PRId8 PRId8
  293. # else
  294. # define KWIML_INT_PRId8 "d"
  295. # endif
  296. #endif
  297. #if !defined(KWIML_INT_SCNd8)
  298. # if defined(KWIML_INT_HAVE_INT8_T) && defined(SCNd8) \
  299. && !defined(KWIML_INT_BROKEN_SCNd8)
  300. # define KWIML_INT_SCNd8 SCNd8
  301. # elif !defined(KWIML_INT_private_NO_SCN8)
  302. # define KWIML_INT_SCNd8 "hhd"
  303. # endif
  304. #endif
  305. #if !defined(KWIML_INT_PRIi8)
  306. # if defined(KWIML_INT_HAVE_INT8_T) && defined(PRIi8) \
  307. && !defined(KWIML_INT_BROKEN_PRIi8)
  308. # define KWIML_INT_PRIi8 PRIi8
  309. # else
  310. # define KWIML_INT_PRIi8 "i"
  311. # endif
  312. #endif
  313. #if !defined(KWIML_INT_SCNi8)
  314. # if defined(KWIML_INT_HAVE_INT8_T) && defined(SCNi8) \
  315. && !defined(KWIML_INT_BROKEN_SCNi8)
  316. # define KWIML_INT_SCNi8 SCNi8
  317. # elif !defined(KWIML_INT_private_NO_SCN8)
  318. # define KWIML_INT_SCNi8 "hhi"
  319. # endif
  320. #endif
  321. /* 8-bit o, u, x, X */
  322. #if !defined(KWIML_INT_PRIo8)
  323. # if defined(KWIML_INT_HAVE_UINT8_T) && defined(PRIo8) \
  324. && !defined(KWIML_INT_BROKEN_PRIo8)
  325. # define KWIML_INT_PRIo8 PRIo8
  326. # else
  327. # define KWIML_INT_PRIo8 "o"
  328. # endif
  329. #endif
  330. #if !defined(KWIML_INT_SCNo8)
  331. # if defined(KWIML_INT_HAVE_UINT8_T) && defined(SCNo8) \
  332. && !defined(KWIML_INT_BROKEN_SCNo8)
  333. # define KWIML_INT_SCNo8 SCNo8
  334. # elif !defined(KWIML_INT_private_NO_SCN8)
  335. # define KWIML_INT_SCNo8 "hho"
  336. # endif
  337. #endif
  338. #if !defined(KWIML_INT_PRIu8)
  339. # if defined(KWIML_INT_HAVE_UINT8_T) && defined(PRIu8) \
  340. && !defined(KWIML_INT_BROKEN_PRIu8)
  341. # define KWIML_INT_PRIu8 PRIu8
  342. # else
  343. # define KWIML_INT_PRIu8 "u"
  344. # endif
  345. #endif
  346. #if !defined(KWIML_INT_SCNu8)
  347. # if defined(KWIML_INT_HAVE_UINT8_T) && defined(SCNu8) \
  348. && !defined(KWIML_INT_BROKEN_SCNu8)
  349. # define KWIML_INT_SCNu8 SCNu8
  350. # elif !defined(KWIML_INT_private_NO_SCN8)
  351. # define KWIML_INT_SCNu8 "hhu"
  352. # endif
  353. #endif
  354. #if !defined(KWIML_INT_PRIx8)
  355. # if defined(KWIML_INT_HAVE_UINT8_T) && defined(PRIx8) \
  356. && !defined(KWIML_INT_BROKEN_PRIx8)
  357. # define KWIML_INT_PRIx8 PRIx8
  358. # else
  359. # define KWIML_INT_PRIx8 "x"
  360. # endif
  361. #endif
  362. #if !defined(KWIML_INT_SCNx8)
  363. # if defined(KWIML_INT_HAVE_UINT8_T) && defined(SCNx8) \
  364. && !defined(KWIML_INT_BROKEN_SCNx8)
  365. # define KWIML_INT_SCNx8 SCNx8
  366. # elif !defined(KWIML_INT_private_NO_SCN8)
  367. # define KWIML_INT_SCNx8 "hhx"
  368. # endif
  369. #endif
  370. #if !defined(KWIML_INT_PRIX8)
  371. # if defined(KWIML_INT_HAVE_UINT8_T) && defined(PRIX8) \
  372. && !defined(KWIML_INT_BROKEN_PRIX8)
  373. # define KWIML_INT_PRIX8 PRIX8
  374. # else
  375. # define KWIML_INT_PRIX8 "X"
  376. # endif
  377. #endif
  378. /* 8-bit constants */
  379. #if !defined(KWIML_INT_INT8_C)
  380. # if defined(INT8_C) && !defined(KWIML_INT_BROKEN_INT8_C)
  381. # define KWIML_INT_INT8_C(c) INT8_C(c)
  382. # else
  383. # define KWIML_INT_INT8_C(c) c
  384. # endif
  385. #endif
  386. #if !defined(KWIML_INT_UINT8_C)
  387. # if defined(UINT8_C) && !defined(KWIML_INT_BROKEN_UINT8_C)
  388. # define KWIML_INT_UINT8_C(c) UINT8_C(c)
  389. # else
  390. # define KWIML_INT_UINT8_C(c) c ## u
  391. # endif
  392. #endif
  393. /*--------------------------------------------------------------------------*/
  394. #if !defined(KWIML_INT_int16_t)
  395. # if defined(KWIML_INT_HAVE_INT16_T)
  396. # define KWIML_INT_int16_t KWIML_INT_detail_GLOBAL_NS(int16_t)
  397. # else
  398. # define KWIML_INT_int16_t signed short
  399. # endif
  400. #endif
  401. #if !defined(KWIML_INT_uint16_t)
  402. # if defined(KWIML_INT_HAVE_UINT16_T)
  403. # define KWIML_INT_uint16_t KWIML_INT_detail_GLOBAL_NS(uint16_t)
  404. # else
  405. # define KWIML_INT_uint16_t unsigned short
  406. # endif
  407. #endif
  408. /* 16-bit d, i */
  409. #if !defined(KWIML_INT_PRId16)
  410. # if defined(KWIML_INT_HAVE_INT16_T) && defined(PRId16) \
  411. && !defined(KWIML_INT_BROKEN_PRId16)
  412. # define KWIML_INT_PRId16 PRId16
  413. # else
  414. # define KWIML_INT_PRId16 "d"
  415. # endif
  416. #endif
  417. #if !defined(KWIML_INT_SCNd16)
  418. # if defined(KWIML_INT_HAVE_INT16_T) && defined(SCNd16) \
  419. && !defined(KWIML_INT_BROKEN_SCNd16)
  420. # define KWIML_INT_SCNd16 SCNd16
  421. # else
  422. # define KWIML_INT_SCNd16 "hd"
  423. # endif
  424. #endif
  425. #if !defined(KWIML_INT_PRIi16)
  426. # if defined(KWIML_INT_HAVE_INT16_T) && defined(PRIi16) \
  427. && !defined(KWIML_INT_BROKEN_PRIi16)
  428. # define KWIML_INT_PRIi16 PRIi16
  429. # else
  430. # define KWIML_INT_PRIi16 "i"
  431. # endif
  432. #endif
  433. #if !defined(KWIML_INT_SCNi16)
  434. # if defined(KWIML_INT_HAVE_INT16_T) && defined(SCNi16) \
  435. && !defined(KWIML_INT_BROKEN_SCNi16)
  436. # define KWIML_INT_SCNi16 SCNi16
  437. # else
  438. # define KWIML_INT_SCNi16 "hi"
  439. # endif
  440. #endif
  441. /* 16-bit o, u, x, X */
  442. #if !defined(KWIML_INT_PRIo16)
  443. # if defined(KWIML_INT_HAVE_UINT16_T) && defined(PRIo16) \
  444. && !defined(KWIML_INT_BROKEN_PRIo16)
  445. # define KWIML_INT_PRIo16 PRIo16
  446. # else
  447. # define KWIML_INT_PRIo16 "o"
  448. # endif
  449. #endif
  450. #if !defined(KWIML_INT_SCNo16)
  451. # if defined(KWIML_INT_HAVE_UINT16_T) && defined(SCNo16) \
  452. && !defined(KWIML_INT_BROKEN_SCNo16)
  453. # define KWIML_INT_SCNo16 SCNo16
  454. # else
  455. # define KWIML_INT_SCNo16 "ho"
  456. # endif
  457. #endif
  458. #if !defined(KWIML_INT_PRIu16)
  459. # if defined(KWIML_INT_HAVE_UINT16_T) && defined(PRIu16) \
  460. && !defined(KWIML_INT_BROKEN_PRIu16)
  461. # define KWIML_INT_PRIu16 PRIu16
  462. # else
  463. # define KWIML_INT_PRIu16 "u"
  464. # endif
  465. #endif
  466. #if !defined(KWIML_INT_SCNu16)
  467. # if defined(KWIML_INT_HAVE_UINT16_T) && defined(SCNu16) \
  468. && !defined(KWIML_INT_BROKEN_SCNu16)
  469. # define KWIML_INT_SCNu16 SCNu16
  470. # else
  471. # define KWIML_INT_SCNu16 "hu"
  472. # endif
  473. #endif
  474. #if !defined(KWIML_INT_PRIx16)
  475. # if defined(KWIML_INT_HAVE_UINT16_T) && defined(PRIx16) \
  476. && !defined(KWIML_INT_BROKEN_PRIx16)
  477. # define KWIML_INT_PRIx16 PRIx16
  478. # else
  479. # define KWIML_INT_PRIx16 "x"
  480. # endif
  481. #endif
  482. #if !defined(KWIML_INT_SCNx16)
  483. # if defined(KWIML_INT_HAVE_UINT16_T) && defined(SCNx16) \
  484. && !defined(KWIML_INT_BROKEN_SCNx16)
  485. # define KWIML_INT_SCNx16 SCNx16
  486. # else
  487. # define KWIML_INT_SCNx16 "hx"
  488. # endif
  489. #endif
  490. #if !defined(KWIML_INT_PRIX16)
  491. # if defined(KWIML_INT_HAVE_UINT16_T) && defined(PRIX16) \
  492. && !defined(KWIML_INT_BROKEN_PRIX16)
  493. # define KWIML_INT_PRIX16 PRIX16
  494. # else
  495. # define KWIML_INT_PRIX16 "X"
  496. # endif
  497. #endif
  498. /* 16-bit constants */
  499. #if !defined(KWIML_INT_INT16_C)
  500. # if defined(INT16_C) && !defined(KWIML_INT_BROKEN_INT16_C)
  501. # define KWIML_INT_INT16_C(c) INT16_C(c)
  502. # else
  503. # define KWIML_INT_INT16_C(c) c
  504. # endif
  505. #endif
  506. #if !defined(KWIML_INT_UINT16_C)
  507. # if defined(UINT16_C) && !defined(KWIML_INT_BROKEN_UINT16_C)
  508. # define KWIML_INT_UINT16_C(c) UINT16_C(c)
  509. # else
  510. # define KWIML_INT_UINT16_C(c) c ## u
  511. # endif
  512. #endif
  513. /*--------------------------------------------------------------------------*/
  514. #if !defined(KWIML_INT_int32_t)
  515. # if defined(KWIML_INT_HAVE_INT32_T)
  516. # define KWIML_INT_int32_t KWIML_INT_detail_GLOBAL_NS(int32_t)
  517. # else
  518. # define KWIML_INT_int32_t signed int
  519. # endif
  520. #endif
  521. #if !defined(KWIML_INT_uint32_t)
  522. # if defined(KWIML_INT_HAVE_UINT32_T)
  523. # define KWIML_INT_uint32_t KWIML_INT_detail_GLOBAL_NS(uint32_t)
  524. # else
  525. # define KWIML_INT_uint32_t unsigned int
  526. # endif
  527. #endif
  528. /* 32-bit d, i */
  529. #if !defined(KWIML_INT_PRId32)
  530. # if defined(KWIML_INT_HAVE_INT32_T) && defined(PRId32) \
  531. && !defined(KWIML_INT_BROKEN_PRId32)
  532. # define KWIML_INT_PRId32 PRId32
  533. # else
  534. # define KWIML_INT_PRId32 "d"
  535. # endif
  536. #endif
  537. #if !defined(KWIML_INT_SCNd32)
  538. # if defined(KWIML_INT_HAVE_INT32_T) && defined(SCNd32) \
  539. && !defined(KWIML_INT_BROKEN_SCNd32)
  540. # define KWIML_INT_SCNd32 SCNd32
  541. # else
  542. # define KWIML_INT_SCNd32 "d"
  543. # endif
  544. #endif
  545. #if !defined(KWIML_INT_PRIi32)
  546. # if defined(KWIML_INT_HAVE_INT32_T) && defined(PRIi32) \
  547. && !defined(KWIML_INT_BROKEN_PRIi32)
  548. # define KWIML_INT_PRIi32 PRIi32
  549. # else
  550. # define KWIML_INT_PRIi32 "i"
  551. # endif
  552. #endif
  553. #if !defined(KWIML_INT_SCNi32)
  554. # if defined(KWIML_INT_HAVE_INT32_T) && defined(SCNi32) \
  555. && !defined(KWIML_INT_BROKEN_SCNi32)
  556. # define KWIML_INT_SCNi32 SCNi32
  557. # else
  558. # define KWIML_INT_SCNi32 "i"
  559. # endif
  560. #endif
  561. /* 32-bit o, u, x, X */
  562. #if !defined(KWIML_INT_PRIo32)
  563. # if defined(KWIML_INT_HAVE_UINT32_T) && defined(PRIo32) \
  564. && !defined(KWIML_INT_BROKEN_PRIo32)
  565. # define KWIML_INT_PRIo32 PRIo32
  566. # else
  567. # define KWIML_INT_PRIo32 "o"
  568. # endif
  569. #endif
  570. #if !defined(KWIML_INT_SCNo32)
  571. # if defined(KWIML_INT_HAVE_UINT32_T) && defined(SCNo32) \
  572. && !defined(KWIML_INT_BROKEN_SCNo32)
  573. # define KWIML_INT_SCNo32 SCNo32
  574. # else
  575. # define KWIML_INT_SCNo32 "o"
  576. # endif
  577. #endif
  578. #if !defined(KWIML_INT_PRIu32)
  579. # if defined(KWIML_INT_HAVE_UINT32_T) && defined(PRIu32) \
  580. && !defined(KWIML_INT_BROKEN_PRIu32)
  581. # define KWIML_INT_PRIu32 PRIu32
  582. # else
  583. # define KWIML_INT_PRIu32 "u"
  584. # endif
  585. #endif
  586. #if !defined(KWIML_INT_SCNu32)
  587. # if defined(KWIML_INT_HAVE_UINT32_T) && defined(SCNu32) \
  588. && !defined(KWIML_INT_BROKEN_SCNu32)
  589. # define KWIML_INT_SCNu32 SCNu32
  590. # else
  591. # define KWIML_INT_SCNu32 "u"
  592. # endif
  593. #endif
  594. #if !defined(KWIML_INT_PRIx32)
  595. # if defined(KWIML_INT_HAVE_UINT32_T) && defined(PRIx32) \
  596. && !defined(KWIML_INT_BROKEN_PRIx32)
  597. # define KWIML_INT_PRIx32 PRIx32
  598. # else
  599. # define KWIML_INT_PRIx32 "x"
  600. # endif
  601. #endif
  602. #if !defined(KWIML_INT_SCNx32)
  603. # if defined(KWIML_INT_HAVE_UINT32_T) && defined(SCNx32) \
  604. && !defined(KWIML_INT_BROKEN_SCNx32)
  605. # define KWIML_INT_SCNx32 SCNx32
  606. # else
  607. # define KWIML_INT_SCNx32 "x"
  608. # endif
  609. #endif
  610. #if !defined(KWIML_INT_PRIX32)
  611. # if defined(KWIML_INT_HAVE_UINT32_T) && defined(PRIX32) \
  612. && !defined(KWIML_INT_BROKEN_PRIX32)
  613. # define KWIML_INT_PRIX32 PRIX32
  614. # else
  615. # define KWIML_INT_PRIX32 "X"
  616. # endif
  617. #endif
  618. #if defined(__hpux) && defined(__GNUC__) && !defined(__LP64__) \
  619. && defined(__CONCAT__) && defined(__CONCAT_U__)
  620. /* Some HPs define UINT32_C incorrectly and break GNU. */
  621. # define KWIML_INT_BROKEN_UINT32_C 1
  622. #endif
  623. /* 32-bit constants */
  624. #if !defined(KWIML_INT_INT32_C)
  625. # if defined(INT32_C) && !defined(KWIML_INT_BROKEN_INT32_C)
  626. # define KWIML_INT_INT32_C(c) INT32_C(c)
  627. # else
  628. # define KWIML_INT_INT32_C(c) c
  629. # endif
  630. #endif
  631. #if !defined(KWIML_INT_UINT32_C)
  632. # if defined(UINT32_C) && !defined(KWIML_INT_BROKEN_UINT32_C)
  633. # define KWIML_INT_UINT32_C(c) UINT32_C(c)
  634. # else
  635. # define KWIML_INT_UINT32_C(c) c ## u
  636. # endif
  637. #endif
  638. /*--------------------------------------------------------------------------*/
  639. #if !defined(KWIML_INT_int64_t) && !defined(KWIML_INT_NO_INT64_T)
  640. # if defined(KWIML_INT_HAVE_INT64_T)
  641. # define KWIML_INT_int64_t KWIML_INT_detail_GLOBAL_NS(int64_t)
  642. # elif KWIML_ABI_SIZEOF_LONG == 8
  643. # define KWIML_INT_int64_t signed long
  644. # elif defined(KWIML_ABI_SIZEOF_LONG_LONG) && KWIML_ABI_SIZEOF_LONG_LONG == 8
  645. # define KWIML_INT_int64_t signed long long
  646. # elif defined(KWIML_ABI_SIZEOF___INT64)
  647. # define KWIML_INT_int64_t signed __int64
  648. # elif defined(KWIML_INT_NO_ERROR_INT64_T)
  649. # define KWIML_INT_NO_INT64_T
  650. # else
  651. # error "No type known for 'int64_t'."
  652. # endif
  653. #endif
  654. #if !defined(KWIML_INT_uint64_t) && !defined(KWIML_INT_NO_UINT64_T)
  655. # if defined(KWIML_INT_HAVE_UINT64_T)
  656. # define KWIML_INT_uint64_t KWIML_INT_detail_GLOBAL_NS(uint64_t)
  657. # elif KWIML_ABI_SIZEOF_LONG == 8
  658. # define KWIML_INT_uint64_t unsigned long
  659. # elif defined(KWIML_ABI_SIZEOF_LONG_LONG) && KWIML_ABI_SIZEOF_LONG_LONG == 8
  660. # define KWIML_INT_uint64_t unsigned long long
  661. # elif defined(KWIML_ABI_SIZEOF___INT64)
  662. # define KWIML_INT_uint64_t unsigned __int64
  663. # elif defined(KWIML_INT_NO_ERROR_UINT64_T)
  664. # define KWIML_INT_NO_UINT64_T
  665. # else
  666. # error "No type known for 'uint64_t'."
  667. # endif
  668. #endif
  669. #if defined(__INTEL_COMPILER)
  670. #elif defined(__BORLANDC__)
  671. # define KWIML_INT_private_NO_FMTLL /* type 'long long' but not 'll' format */
  672. # define KWIML_INT_BROKEN_INT64_C 1 /* system macro defined incorrectly */
  673. # define KWIML_INT_BROKEN_UINT64_C 1 /* system macro defined incorrectly */
  674. #elif defined(_MSC_VER) && _MSC_VER < 1400
  675. # define KWIML_INT_private_NO_FMTLL /* type 'long long' but not 'll' format */
  676. #endif
  677. #if !defined(KWIML_INT_detail_FMT64)
  678. # if KWIML_ABI_SIZEOF_LONG == 8
  679. # define KWIML_INT_detail_FMT64 "l"
  680. # elif defined(KWIML_ABI_SIZEOF_LONG_LONG) && KWIML_ABI_SIZEOF_LONG_LONG == 8
  681. # if !defined(KWIML_INT_private_NO_FMTLL)
  682. # define KWIML_INT_detail_FMT64 "ll"
  683. # else
  684. # define KWIML_INT_detail_FMT64 "I64"
  685. # endif
  686. # elif defined(KWIML_ABI_SIZEOF___INT64)
  687. # if defined(__BORLANDC__)
  688. # define KWIML_INT_detail_FMT64 "L"
  689. # else
  690. # define KWIML_INT_detail_FMT64 "I64"
  691. # endif
  692. # endif
  693. #endif
  694. #undef KWIML_INT_private_NO_FMTLL
  695. /* 64-bit d, i */
  696. #if !defined(KWIML_INT_PRId64)
  697. # if defined(KWIML_INT_HAVE_INT64_T) && defined(PRId64) \
  698. && !defined(KWIML_INT_BROKEN_PRId64)
  699. # define KWIML_INT_PRId64 PRId64
  700. # elif defined(KWIML_INT_detail_FMT64)
  701. # define KWIML_INT_PRId64 KWIML_INT_detail_FMT64 "d"
  702. # endif
  703. #endif
  704. #if !defined(KWIML_INT_SCNd64)
  705. # if defined(KWIML_INT_HAVE_INT64_T) && defined(SCNd64) \
  706. && !defined(KWIML_INT_BROKEN_SCNd64)
  707. # define KWIML_INT_SCNd64 SCNd64
  708. # elif defined(KWIML_INT_detail_FMT64) && !defined(KWIML_INT_private_NO_SCN64)
  709. # define KWIML_INT_SCNd64 KWIML_INT_detail_FMT64 "d"
  710. # endif
  711. #endif
  712. #if !defined(KWIML_INT_PRIi64)
  713. # if defined(KWIML_INT_HAVE_INT64_T) && defined(PRIi64) \
  714. && !defined(KWIML_INT_BROKEN_PRIi64)
  715. # define KWIML_INT_PRIi64 PRIi64
  716. # elif defined(KWIML_INT_detail_FMT64)
  717. # define KWIML_INT_PRIi64 KWIML_INT_detail_FMT64 "d"
  718. # endif
  719. #endif
  720. #if !defined(KWIML_INT_SCNi64)
  721. # if defined(KWIML_INT_HAVE_INT64_T) && defined(SCNi64) \
  722. && !defined(KWIML_INT_BROKEN_SCNi64)
  723. # define KWIML_INT_SCNi64 SCNi64
  724. # elif defined(KWIML_INT_detail_FMT64) && !defined(KWIML_INT_private_NO_SCN64)
  725. # define KWIML_INT_SCNi64 KWIML_INT_detail_FMT64 "d"
  726. # endif
  727. #endif
  728. /* 64-bit o, u, x, X */
  729. #if !defined(KWIML_INT_PRIo64)
  730. # if defined(KWIML_INT_HAVE_UINT64_T) && defined(PRIo64) \
  731. && !defined(KWIML_INT_BROKEN_PRIo64)
  732. # define KWIML_INT_PRIo64 PRIo64
  733. # elif defined(KWIML_INT_detail_FMT64)
  734. # define KWIML_INT_PRIo64 KWIML_INT_detail_FMT64 "o"
  735. # endif
  736. #endif
  737. #if !defined(KWIML_INT_SCNo64)
  738. # if defined(KWIML_INT_HAVE_UINT64_T) && defined(SCNo64) \
  739. && !defined(KWIML_INT_BROKEN_SCNo64)
  740. # define KWIML_INT_SCNo64 SCNo64
  741. # elif defined(KWIML_INT_detail_FMT64) && !defined(KWIML_INT_private_NO_SCN64)
  742. # define KWIML_INT_SCNo64 KWIML_INT_detail_FMT64 "o"
  743. # endif
  744. #endif
  745. #if !defined(KWIML_INT_PRIu64)
  746. # if defined(KWIML_INT_HAVE_UINT64_T) && defined(PRIu64) \
  747. && !defined(KWIML_INT_BROKEN_PRIu64)
  748. # define KWIML_INT_PRIu64 PRIu64
  749. # elif defined(KWIML_INT_detail_FMT64)
  750. # define KWIML_INT_PRIu64 KWIML_INT_detail_FMT64 "u"
  751. # endif
  752. #endif
  753. #if !defined(KWIML_INT_SCNu64)
  754. # if defined(KWIML_INT_HAVE_UINT64_T) && defined(SCNu64) \
  755. && !defined(KWIML_INT_BROKEN_SCNu64)
  756. # define KWIML_INT_SCNu64 SCNu64
  757. # elif defined(KWIML_INT_detail_FMT64) && !defined(KWIML_INT_private_NO_SCN64)
  758. # define KWIML_INT_SCNu64 KWIML_INT_detail_FMT64 "u"
  759. # endif
  760. #endif
  761. #if !defined(KWIML_INT_PRIx64)
  762. # if defined(KWIML_INT_HAVE_UINT64_T) && defined(PRIx64) \
  763. && !defined(KWIML_INT_BROKEN_PRIx64)
  764. # define KWIML_INT_PRIx64 PRIx64
  765. # elif defined(KWIML_INT_detail_FMT64)
  766. # define KWIML_INT_PRIx64 KWIML_INT_detail_FMT64 "x"
  767. # endif
  768. #endif
  769. #if !defined(KWIML_INT_SCNx64)
  770. # if defined(KWIML_INT_HAVE_UINT64_T) && defined(SCNx64) \
  771. && !defined(KWIML_INT_BROKEN_SCNx64)
  772. # define KWIML_INT_SCNx64 SCNx64
  773. # elif defined(KWIML_INT_detail_FMT64) && !defined(KWIML_INT_private_NO_SCN64)
  774. # define KWIML_INT_SCNx64 KWIML_INT_detail_FMT64 "x"
  775. # endif
  776. #endif
  777. #if !defined(KWIML_INT_PRIX64)
  778. # if defined(KWIML_INT_HAVE_UINT64_T) && defined(PRIX64) \
  779. && !defined(KWIML_INT_BROKEN_PRIX64)
  780. # define KWIML_INT_PRIX64 PRIX64
  781. # elif defined(KWIML_INT_detail_FMT64)
  782. # define KWIML_INT_PRIX64 KWIML_INT_detail_FMT64 "X"
  783. # endif
  784. #endif
  785. /* 64-bit constants */
  786. #if !defined(KWIML_INT_INT64_C)
  787. # if defined(KWIML_INT_HAVE_INT64_T) && defined(INT64_C) \
  788. && !defined(KWIML_INT_BROKEN_INT64_C)
  789. # define KWIML_INT_INT64_C(c) INT64_C(c)
  790. # elif KWIML_ABI_SIZEOF_LONG == 8
  791. # define KWIML_INT_INT64_C(c) c ## l
  792. # elif defined(KWIML_ABI_SIZEOF_LONG_LONG) && KWIML_ABI_SIZEOF_LONG_LONG == 8
  793. # define KWIML_INT_INT64_C(c) c ## ll
  794. # elif defined(KWIML_ABI_SIZEOF___INT64)
  795. # define KWIML_INT_INT64_C(c) c ## i64
  796. # endif
  797. #endif
  798. #if !defined(KWIML_INT_UINT64_C)
  799. # if defined(KWIML_INT_HAVE_UINT64_T) && defined(UINT64_C) \
  800. && !defined(KWIML_INT_BROKEN_UINT64_C)
  801. # define KWIML_INT_UINT64_C(c) UINT64_C(c)
  802. # elif KWIML_ABI_SIZEOF_LONG == 8
  803. # define KWIML_INT_UINT64_C(c) c ## ul
  804. # elif defined(KWIML_ABI_SIZEOF_LONG_LONG) && KWIML_ABI_SIZEOF_LONG_LONG == 8
  805. # define KWIML_INT_UINT64_C(c) c ## ull
  806. # elif defined(KWIML_ABI_SIZEOF___INT64)
  807. # define KWIML_INT_UINT64_C(c) c ## ui64
  808. # endif
  809. #endif
  810. /*--------------------------------------------------------------------------*/
  811. #if !defined(KWIML_INT_intptr_t) && !defined(KWIML_INT_NO_INTPTR_T)
  812. # if defined(KWIML_INT_HAVE_INTPTR_T)
  813. # define KWIML_INT_intptr_t KWIML_INT_detail_GLOBAL_NS(intptr_t)
  814. # elif KWIML_ABI_SIZEOF_DATA_PTR == 4
  815. # define KWIML_INT_intptr_t KWIML_INT_int32_t
  816. # elif !defined(KWIML_INT_NO_INT64_T)
  817. # define KWIML_INT_intptr_t KWIML_INT_int64_t
  818. # elif defined(KWIML_INT_NO_ERROR_INTPTR_T)
  819. # define KWIML_INT_NO_INTPTR_T
  820. # else
  821. # error "No type known for 'intptr_t'."
  822. # endif
  823. #endif
  824. #if !defined(KWIML_INT_uintptr_t) && !defined(KWIML_INT_NO_UINTPTR_T)
  825. # if defined(KWIML_INT_HAVE_UINTPTR_T)
  826. # define KWIML_INT_uintptr_t KWIML_INT_detail_GLOBAL_NS(uintptr_t)
  827. # elif KWIML_ABI_SIZEOF_DATA_PTR == 4
  828. # define KWIML_INT_uintptr_t KWIML_INT_uint32_t
  829. # elif !defined(KWIML_INT_NO_UINT64_T)
  830. # define KWIML_INT_uintptr_t KWIML_INT_uint64_t
  831. # elif defined(KWIML_INT_NO_ERROR_UINTPTR_T)
  832. # define KWIML_INT_NO_UINTPTR_T
  833. # else
  834. # error "No type known for 'uintptr_t'."
  835. # endif
  836. #endif
  837. #if !defined(KWIML_INT_PRIdPTR)
  838. # if defined(KWIML_INT_HAVE_INTPTR_T) && defined(PRIdPTR) \
  839. && !defined(KWIML_INT_BROKEN_PRIdPTR)
  840. # define KWIML_INT_PRIdPTR PRIdPTR
  841. # elif KWIML_ABI_SIZEOF_DATA_PTR == 4
  842. # define KWIML_INT_PRIdPTR KWIML_INT_PRId32
  843. # elif !defined(KWIML_INT_NO_UINT64_T)
  844. # define KWIML_INT_PRIdPTR KWIML_INT_PRId64
  845. # endif
  846. #endif
  847. #if !defined(KWIML_INT_SCNdPTR)
  848. # if defined(KWIML_INT_HAVE_INTPTR_T) && defined(SCNdPTR) \
  849. && !defined(KWIML_INT_BROKEN_SCNdPTR)
  850. # define KWIML_INT_SCNdPTR SCNdPTR
  851. # elif KWIML_ABI_SIZEOF_DATA_PTR == 4
  852. # define KWIML_INT_SCNdPTR KWIML_INT_SCNd32
  853. # elif !defined(KWIML_INT_NO_UINT64_T)
  854. # define KWIML_INT_SCNdPTR KWIML_INT_SCNd64
  855. # endif
  856. #endif
  857. #if !defined(KWIML_INT_PRIiPTR)
  858. # if defined(KWIML_INT_HAVE_INTPTR_T) && defined(PRIiPTR) \
  859. && !defined(KWIML_INT_BROKEN_PRIiPTR)
  860. # define KWIML_INT_PRIiPTR PRIiPTR
  861. # elif KWIML_ABI_SIZEOF_DATA_PTR == 4
  862. # define KWIML_INT_PRIiPTR KWIML_INT_PRIi32
  863. # elif !defined(KWIML_INT_NO_UINT64_T)
  864. # define KWIML_INT_PRIiPTR KWIML_INT_PRIi64
  865. # endif
  866. #endif
  867. #if !defined(KWIML_INT_SCNiPTR)
  868. # if defined(KWIML_INT_HAVE_INTPTR_T) && defined(SCNiPTR) \
  869. && !defined(KWIML_INT_BROKEN_SCNiPTR)
  870. # define KWIML_INT_SCNiPTR SCNiPTR
  871. # elif KWIML_ABI_SIZEOF_DATA_PTR == 4
  872. # define KWIML_INT_SCNiPTR KWIML_INT_SCNi32
  873. # elif !defined(KWIML_INT_NO_UINT64_T)
  874. # define KWIML_INT_SCNiPTR KWIML_INT_SCNi64
  875. # endif
  876. #endif
  877. #if !defined(KWIML_INT_PRIoPTR)
  878. # if defined(KWIML_INT_HAVE_UINTPTR_T) && defined(PRIoPTR) \
  879. && !defined(KWIML_INT_BROKEN_PRIoPTR)
  880. # define KWIML_INT_PRIoPTR PRIoPTR
  881. # elif KWIML_ABI_SIZEOF_DATA_PTR == 4
  882. # define KWIML_INT_PRIoPTR KWIML_INT_PRIo32
  883. # elif !defined(KWIML_INT_NO_UINT64_T)
  884. # define KWIML_INT_PRIoPTR KWIML_INT_PRIo64
  885. # endif
  886. #endif
  887. #if !defined(KWIML_INT_SCNoPTR)
  888. # if defined(KWIML_INT_HAVE_UINTPTR_T) && defined(SCNoPTR) \
  889. && !defined(KWIML_INT_BROKEN_SCNoPTR)
  890. # define KWIML_INT_SCNoPTR SCNoPTR
  891. # elif KWIML_ABI_SIZEOF_DATA_PTR == 4
  892. # define KWIML_INT_SCNoPTR KWIML_INT_SCNo32
  893. # elif !defined(KWIML_INT_NO_UINT64_T)
  894. # define KWIML_INT_SCNoPTR KWIML_INT_SCNo64
  895. # endif
  896. #endif
  897. #if !defined(KWIML_INT_PRIuPTR)
  898. # if defined(KWIML_INT_HAVE_UINTPTR_T) && defined(PRIuPTR) \
  899. && !defined(KWIML_INT_BROKEN_PRIuPTR)
  900. # define KWIML_INT_PRIuPTR PRIuPTR
  901. # elif KWIML_ABI_SIZEOF_DATA_PTR == 4
  902. # define KWIML_INT_PRIuPTR KWIML_INT_PRIu32
  903. # elif !defined(KWIML_INT_NO_UINT64_T)
  904. # define KWIML_INT_PRIuPTR KWIML_INT_PRIu64
  905. # endif
  906. #endif
  907. #if !defined(KWIML_INT_SCNuPTR)
  908. # if defined(KWIML_INT_HAVE_UINTPTR_T) && defined(SCNuPTR) \
  909. && !defined(KWIML_INT_BROKEN_SCNuPTR)
  910. # define KWIML_INT_SCNuPTR SCNuPTR
  911. # elif KWIML_ABI_SIZEOF_DATA_PTR == 4
  912. # define KWIML_INT_SCNuPTR KWIML_INT_SCNu32
  913. # elif !defined(KWIML_INT_NO_UINT64_T)
  914. # define KWIML_INT_SCNuPTR KWIML_INT_SCNu64
  915. # endif
  916. #endif
  917. #if !defined(KWIML_INT_PRIxPTR)
  918. # if defined(KWIML_INT_HAVE_UINTPTR_T) && defined(PRIxPTR) \
  919. && !defined(KWIML_INT_BROKEN_PRIxPTR)
  920. # define KWIML_INT_PRIxPTR PRIxPTR
  921. # elif KWIML_ABI_SIZEOF_DATA_PTR == 4
  922. # define KWIML_INT_PRIxPTR KWIML_INT_PRIx32
  923. # elif !defined(KWIML_INT_NO_UINT64_T)
  924. # define KWIML_INT_PRIxPTR KWIML_INT_PRIx64
  925. # endif
  926. #endif
  927. #if !defined(KWIML_INT_SCNxPTR)
  928. # if defined(KWIML_INT_HAVE_UINTPTR_T) && defined(SCNxPTR) \
  929. && !defined(KWIML_INT_BROKEN_SCNxPTR)
  930. # define KWIML_INT_SCNxPTR SCNxPTR
  931. # elif KWIML_ABI_SIZEOF_DATA_PTR == 4
  932. # define KWIML_INT_SCNxPTR KWIML_INT_SCNx32
  933. # elif !defined(KWIML_INT_NO_UINT64_T)
  934. # define KWIML_INT_SCNxPTR KWIML_INT_SCNx64
  935. # endif
  936. #endif
  937. #if !defined(KWIML_INT_PRIXPTR)
  938. # if defined(KWIML_INT_HAVE_UINTPTR_T) && defined(PRIXPTR) \
  939. && !defined(KWIML_INT_BROKEN_PRIXPTR)
  940. # define KWIML_INT_PRIXPTR PRIXPTR
  941. # elif KWIML_ABI_SIZEOF_DATA_PTR == 4
  942. # define KWIML_INT_PRIXPTR KWIML_INT_PRIX32
  943. # elif !defined(KWIML_INT_NO_UINT64_T)
  944. # define KWIML_INT_PRIXPTR KWIML_INT_PRIX64
  945. # endif
  946. #endif
  947. #undef KWIML_INT_private_NO_SCN64
  948. #undef KWIML_INT_private_NO_SCN8
  949. #endif /* KWIML_INT_private_DO_DEFINE */
  950. /*--------------------------------------------------------------------------*/
  951. #ifdef KWIML_INT_private_DO_VERIFY
  952. #undef KWIML_INT_private_DO_VERIFY
  953. #if defined(_MSC_VER)
  954. # pragma warning (push)
  955. # pragma warning (disable:4309) /* static_cast trunction of constant value */
  956. # pragma warning (disable:4310) /* cast truncates constant value */
  957. #endif
  958. #if defined(__cplusplus) && !defined(__BORLANDC__)
  959. #define KWIML_INT_private_STATIC_CAST(t,v) static_cast<t>(v)
  960. #else
  961. #define KWIML_INT_private_STATIC_CAST(t,v) (t)(v)
  962. #endif
  963. #define KWIML_INT_private_VERIFY(n, x, y) KWIML_INT_private_VERIFY_0(KWIML_INT_private_VERSION, n, x, y)
  964. #define KWIML_INT_private_VERIFY_0(V, n, x, y) KWIML_INT_private_VERIFY_1(V, n, x, y)
  965. #define KWIML_INT_private_VERIFY_1(V, n, x, y) extern int (*n##_v##V)[x]; extern int (*n##_v##V)[y]
  966. #define KWIML_INT_private_VERIFY_BOOL(m, b) KWIML_INT_private_VERIFY(KWIML_INT_detail_VERIFY_##m, 2, (b)?2:3)
  967. #define KWIML_INT_private_VERIFY_TYPE(t, s) KWIML_INT_private_VERIFY(KWIML_INT_detail_VERIFY_##t, s, sizeof(t))
  968. #define KWIML_INT_private_VERIFY_SIGN(t, u, o) \
  969. KWIML_INT_private_VERIFY_BOOL(SIGN_##t, KWIML_INT_private_STATIC_CAST( \
  970. t, KWIML_INT_private_STATIC_CAST(u, 1) << ((sizeof(t)<<3)-1)) o 0)
  971. KWIML_INT_private_VERIFY_TYPE(KWIML_INT_int8_t, 1);
  972. KWIML_INT_private_VERIFY_TYPE(KWIML_INT_uint8_t, 1);
  973. KWIML_INT_private_VERIFY_TYPE(KWIML_INT_int16_t, 2);
  974. KWIML_INT_private_VERIFY_TYPE(KWIML_INT_uint16_t, 2);
  975. KWIML_INT_private_VERIFY_TYPE(KWIML_INT_int32_t, 4);
  976. KWIML_INT_private_VERIFY_TYPE(KWIML_INT_uint32_t, 4);
  977. #if !defined(KWIML_INT_NO_INT64_T)
  978. KWIML_INT_private_VERIFY_TYPE(KWIML_INT_int64_t, 8);
  979. #endif
  980. #if !defined(KWIML_INT_NO_UINT64_T)
  981. KWIML_INT_private_VERIFY_TYPE(KWIML_INT_uint64_t, 8);
  982. #endif
  983. #if !defined(KWIML_INT_NO_INTPTR_T)
  984. KWIML_INT_private_VERIFY_TYPE(KWIML_INT_intptr_t, sizeof(void*));
  985. #endif
  986. #if !defined(KWIML_INT_NO_UINTPTR_T)
  987. KWIML_INT_private_VERIFY_TYPE(KWIML_INT_uintptr_t, sizeof(void*));
  988. #endif
  989. KWIML_INT_private_VERIFY_SIGN(KWIML_INT_int8_t, KWIML_INT_uint8_t, <);
  990. KWIML_INT_private_VERIFY_SIGN(KWIML_INT_uint8_t, KWIML_INT_uint8_t, >);
  991. KWIML_INT_private_VERIFY_SIGN(KWIML_INT_int16_t, KWIML_INT_uint16_t, <);
  992. KWIML_INT_private_VERIFY_SIGN(KWIML_INT_uint16_t, KWIML_INT_uint16_t, >);
  993. KWIML_INT_private_VERIFY_SIGN(KWIML_INT_int32_t, KWIML_INT_uint32_t, <);
  994. KWIML_INT_private_VERIFY_SIGN(KWIML_INT_uint32_t, KWIML_INT_uint32_t, >);
  995. #if !defined(KWIML_INT_NO_INT64_T)
  996. KWIML_INT_private_VERIFY_SIGN(KWIML_INT_int64_t, KWIML_INT_uint64_t, <);
  997. #endif
  998. #if !defined(KWIML_INT_NO_UINT64_T)
  999. KWIML_INT_private_VERIFY_SIGN(KWIML_INT_uint64_t, KWIML_INT_uint64_t, >);
  1000. #endif
  1001. #if !defined(KWIML_INT_NO_INTPTR_T)
  1002. KWIML_INT_private_VERIFY_SIGN(KWIML_INT_intptr_t, KWIML_INT_uintptr_t, <);
  1003. #endif
  1004. #if !defined(KWIML_INT_NO_UINTPTR_T)
  1005. KWIML_INT_private_VERIFY_SIGN(KWIML_INT_uintptr_t, KWIML_INT_uintptr_t, >);
  1006. #endif
  1007. #undef KWIML_INT_private_VERIFY_SIGN
  1008. #undef KWIML_INT_private_VERIFY_TYPE
  1009. #undef KWIML_INT_private_VERIFY_BOOL
  1010. #undef KWIML_INT_private_VERIFY_1
  1011. #undef KWIML_INT_private_VERIFY_0
  1012. #undef KWIML_INT_private_VERIFY
  1013. #undef KWIML_INT_private_STATIC_CAST
  1014. #if defined(_MSC_VER)
  1015. # pragma warning (pop)
  1016. #endif
  1017. #endif /* KWIML_INT_private_DO_VERIFY */
  1018. #undef KWIML_INT_private_VERSION