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