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