736 lines
26 KiB
C
736 lines
26 KiB
C
/*============================================================================
|
|
Kitware Information Macro Library
|
|
Copyright 2010-2011 Kitware, Inc.
|
|
All rights reserved.
|
|
|
|
Redistribution and use in source and binary forms, with or without
|
|
modification, are permitted provided that the following conditions
|
|
are met:
|
|
|
|
* Redistributions of source code must retain the above copyright
|
|
notice, this list of conditions and the following disclaimer.
|
|
|
|
* Redistributions in binary form must reproduce the above copyright
|
|
notice, this list of conditions and the following disclaimer in the
|
|
documentation and/or other materials provided with the distribution.
|
|
|
|
* Neither the name of Kitware, Inc. nor the names of its contributors
|
|
may be used to endorse or promote products derived from this
|
|
software without specific prior written permission.
|
|
|
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
============================================================================*/
|
|
#ifndef @KWIML@_INT_H
|
|
#define @KWIML@_INT_H
|
|
/*
|
|
This header defines macros with information about sized integer types.
|
|
Only information that can be determined using the preprocessor at
|
|
compilation time is available. No try-compile results may be added
|
|
here. Instead we memorize results on platforms of interest.
|
|
|
|
An includer may optionally define the following macros to suppress errors:
|
|
|
|
Input:
|
|
@KWIML@_INT_NO_VERIFY = skip verification declarations
|
|
@KWIML@_INT_NO_ERROR_INT64_T = type '@KWIML@_INT_int64_t' is optional (*)
|
|
@KWIML@_INT_NO_ERROR_UINT64_T = type '@KWIML@_INT_uint64_t' is optional (*)
|
|
@KWIML@_INT_NO_ERROR_INTPTR_T = type '@KWIML@_INT_intptr_t' is optional (*)
|
|
@KWIML@_INT_NO_ERROR_UINTPTR_T = type '@KWIML@_INT_uintptr_t' is optional (*)
|
|
|
|
An includer may optionally define the following macros to override defaults.
|
|
Either way, an includer may test these macros after inclusion:
|
|
|
|
@KWIML@_INT_HAVE_STDINT_H = include <stdint.h>
|
|
@KWIML@_INT_NO_STDINT_H = do not include <stdint.h>
|
|
@KWIML@_INT_HAVE_INTTYPES_H = include <inttypes.h>
|
|
@KWIML@_INT_NO_INTTYPES_H = do not include <inttypes.h>
|
|
|
|
An includer may test the following macros after inclusion:
|
|
|
|
@KWIML@_INT_HAVE_INT#_T = type 'int#_t' is available
|
|
@KWIML@_INT_HAVE_UINT#_T = type 'uint#_t' is available
|
|
# = 8, 16, 32, 64, PTR
|
|
|
|
@KWIML@_INT_int#_t = signed integer type exactly # bits wide
|
|
@KWIML@_INT_uint#_t = unsigned integer type exactly # bits wide
|
|
# = 8, 16, 32, 64 (*), ptr (*)
|
|
|
|
@KWIML@_INT_NO_INT64_T = type '@KWIML@_INT_int64_t' not available
|
|
@KWIML@_INT_NO_UINT64_T = type '@KWIML@_INT_uint64_t' not available
|
|
@KWIML@_INT_NO_INTPTR_T = type '@KWIML@_INT_intptr_t' not available
|
|
@KWIML@_INT_NO_UINTPTR_T = type '@KWIML@_INT_uintptr_t' not available
|
|
|
|
@KWIML@_INT_INT#_C(c) = signed integer constant at least # bits wide
|
|
@KWIML@_INT_UINT#_C(c) = unsigned integer constant at least # bits wide
|
|
# = 8, 16, 32, 64 (*)
|
|
|
|
@KWIML@_INT_<fmt># = print or scan format, <fmt> in table below
|
|
# = 8, 16, 32, 64, PTR (*)
|
|
|
|
signed unsigned
|
|
----------- ------------------------------
|
|
| decimal | decimal octal hexadecimal |
|
|
print | PRId PRIi | PRIu PRIo PRIx PRIX |
|
|
scan | SCNd SCNi | SCNu SCNo SCNx |
|
|
----------- ------------------------------
|
|
|
|
The SCN*8 and SCN*64 format macros will not be defined on systems
|
|
with scanf implementations known not to support them.
|
|
|
|
@KWIML@_INT_BROKEN_INT64_C = macro INT64_C is incorrect if defined
|
|
@KWIML@_INT_BROKEN_UINT64_C = macro UINT64_C is incorrect if defined
|
|
Some compilers define integer constant macros incorrectly and
|
|
cannot handle literals as large as the integer type.
|
|
|
|
@KWIML@_INT_BROKEN_INT8_T = type 'int8_t' is available but incorrect
|
|
Some compilers have a flag to make 'char' (un)signed but do not account
|
|
for it while defining int8_t in the non-default case.
|
|
|
|
The broken cases do not affect correctness of the macros documented above.
|
|
*/
|
|
|
|
#include "ABI.h"
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
#if defined(@KWIML@_INT_HAVE_STDINT_H) /* Already defined. */
|
|
#elif defined(@KWIML@_INT_NO_STDINT_H) /* Already defined. */
|
|
#elif defined(HAVE_STDINT_H) /* Optionally provided by includer. */
|
|
# define @KWIML@_INT_HAVE_STDINT_H 1
|
|
#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */
|
|
# define @KWIML@_INT_HAVE_STDINT_H 1
|
|
#elif defined(_MSC_VER) /* MSVC */
|
|
# if _MSC_VER >= 1600
|
|
# define @KWIML@_INT_HAVE_STDINT_H 1
|
|
# else
|
|
# define @KWIML@_INT_NO_STDINT_H 1
|
|
# endif
|
|
#elif defined(__BORLANDC__) /* Borland */
|
|
# if __BORLANDC__ >= 0x560
|
|
# define @KWIML@_INT_HAVE_STDINT_H 1
|
|
# else
|
|
# define @KWIML@_INT_NO_STDINT_H 1
|
|
# endif
|
|
#elif defined(__WATCOMC__) /* Watcom */
|
|
# define @KWIML@_INT_NO_STDINT_H 1
|
|
#endif
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
#if defined(@KWIML@_INT_HAVE_INTTYPES_H) /* Already defined. */
|
|
#elif defined(@KWIML@_INT_NO_INTTYPES_H) /* Already defined. */
|
|
#elif defined(HAVE_INTTYPES_H) /* Optionally provided by includer. */
|
|
# define @KWIML@_INT_HAVE_INTTYPES_H 1
|
|
#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */
|
|
# define @KWIML@_INT_HAVE_INTTYPES_H 1
|
|
#elif defined(_MSC_VER) /* MSVC */
|
|
# define @KWIML@_INT_NO_INTTYPES_H 1
|
|
#elif defined(__BORLANDC__) /* Borland */
|
|
# define @KWIML@_INT_NO_INTTYPES_H 1
|
|
#elif defined(__WATCOMC__) /* Watcom */
|
|
# define @KWIML@_INT_NO_INTTYPES_H 1
|
|
#else /* Assume it exists. */
|
|
# define @KWIML@_INT_HAVE_INTTYPES_H 1
|
|
#endif
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
#if defined(@KWIML@_INT_HAVE_STDINT_H) && defined(@KWIML@_INT_NO_STDINT_H)
|
|
# error "Both @KWIML@_INT_HAVE_STDINT_H and @KWIML@_INT_NO_STDINT_H defined!"
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_INTTYPES_H) && defined(@KWIML@_INT_NO_INTTYPES_H)
|
|
# error "Both @KWIML@_INT_HAVE_INTTYPES_H and @KWIML@_INT_NO_INTTYPES_H defined!"
|
|
#endif
|
|
|
|
#if defined(@KWIML@_INT_HAVE_STDINT_H)
|
|
# include <stdint.h>
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_INTTYPES_H)
|
|
# if defined(__cplusplus) && !defined(__STDC_FORMAT_MACROS)
|
|
# define __STDC_FORMAT_MACROS
|
|
# endif
|
|
# include <inttypes.h>
|
|
#endif
|
|
|
|
#if defined(@KWIML@_INT_HAVE_STDINT_H) || defined(@KWIML@_INT_HAVE_INTTYPES_H)
|
|
#define @KWIML@_INT_HAVE_INT8_T 1
|
|
#define @KWIML@_INT_HAVE_UINT8_T 1
|
|
#define @KWIML@_INT_HAVE_INT16_T 1
|
|
#define @KWIML@_INT_HAVE_UINT16_T 1
|
|
#define @KWIML@_INT_HAVE_INT32_T 1
|
|
#define @KWIML@_INT_HAVE_UINT32_T 1
|
|
#define @KWIML@_INT_HAVE_INT64_T 1
|
|
#define @KWIML@_INT_HAVE_UINT64_T 1
|
|
#define @KWIML@_INT_HAVE_INTPTR_T 1
|
|
#define @KWIML@_INT_HAVE_UINTPTR_T 1
|
|
#endif
|
|
|
|
#if (defined(__SUNPRO_C)||defined(__SUNPRO_CC)) && defined(_CHAR_IS_UNSIGNED)
|
|
# define @KWIML@_INT_BROKEN_INT8_T /* system type defined incorrectly */
|
|
#elif defined(__BORLANDC__) && defined(_CHAR_UNSIGNED)
|
|
# define @KWIML@_INT_BROKEN_INT8_T /* system type defined incorrectly */
|
|
#endif
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
#if defined(@KWIML@_INT_HAVE_INT8_T) && !defined(@KWIML@_INT_BROKEN_INT8_T)
|
|
# define @KWIML@_INT_int8_t int8_t
|
|
#else
|
|
# define @KWIML@_INT_int8_t signed char
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_UINT8_T)
|
|
# define @KWIML@_INT_uint8_t uint8_t
|
|
#else
|
|
# define @KWIML@_INT_uint8_t unsigned char
|
|
#endif
|
|
|
|
#if defined(__INTEL_COMPILER)
|
|
#elif defined(__SUNPRO_C) && __SUNPRO_C < 0x570
|
|
# define @KWIML@_INT__NO_SCN8
|
|
#elif defined(__SUNPRO_CC) && __SUNPRO_CC < 0x570
|
|
# define @KWIML@_INT__NO_SCN8
|
|
#elif defined(__HP_cc) || defined(__HP_aCC)
|
|
# define @KWIML@_INT__NO_SCN8
|
|
#elif defined(__BORLANDC__)
|
|
# define @KWIML@_INT__NO_SCN8
|
|
# define @KWIML@_INT__NO_SCN64
|
|
#elif defined(_MSC_VER)
|
|
# define @KWIML@_INT__NO_SCN8
|
|
#elif defined(__WATCOMC__)
|
|
# define @KWIML@_INT__NO_SCN8
|
|
#endif
|
|
|
|
/* 8-bit d, i */
|
|
#if defined(@KWIML@_INT_HAVE_INT8_T) && defined(PRId8)
|
|
# define @KWIML@_INT_PRId8 PRId8
|
|
#else
|
|
# define @KWIML@_INT_PRId8 "d"
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_INT8_T) && defined(SCNd8)
|
|
# define @KWIML@_INT_SCNd8 SCNd8
|
|
#elif !defined(@KWIML@_INT__NO_SCN8)
|
|
# define @KWIML@_INT_SCNd8 "hhd"
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_INT8_T) && defined(PRIi8)
|
|
# define @KWIML@_INT_PRIi8 PRIi8
|
|
#else
|
|
# define @KWIML@_INT_PRIi8 "i"
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_INT8_T) && defined(SCNi8)
|
|
# define @KWIML@_INT_SCNi8 SCNi8
|
|
#elif !defined(@KWIML@_INT__NO_SCN8)
|
|
# define @KWIML@_INT_SCNi8 "hhi"
|
|
#endif
|
|
|
|
/* 8-bit o, u, x, X */
|
|
#if defined(@KWIML@_INT_HAVE_UINT8_T) && defined(PRIo8)
|
|
# define @KWIML@_INT_PRIo8 PRIo8
|
|
#else
|
|
# define @KWIML@_INT_PRIo8 "o"
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_UINT8_T) && defined(SCNo8)
|
|
# define @KWIML@_INT_SCNo8 SCNo8
|
|
#elif !defined(@KWIML@_INT__NO_SCN8)
|
|
# define @KWIML@_INT_SCNo8 "hho"
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_UINT8_T) && defined(PRIu8)
|
|
# define @KWIML@_INT_PRIu8 PRIu8
|
|
#else
|
|
# define @KWIML@_INT_PRIu8 "u"
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_UINT8_T) && defined(SCNu8)
|
|
# define @KWIML@_INT_SCNu8 SCNu8
|
|
#elif !defined(@KWIML@_INT__NO_SCN8)
|
|
# define @KWIML@_INT_SCNu8 "hhu"
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_UINT8_T) && defined(PRIx8)
|
|
# define @KWIML@_INT_PRIx8 PRIx8
|
|
#else
|
|
# define @KWIML@_INT_PRIx8 "x"
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_UINT8_T) && defined(SCNx8)
|
|
# define @KWIML@_INT_SCNx8 SCNx8
|
|
#elif !defined(@KWIML@_INT__NO_SCN8)
|
|
# define @KWIML@_INT_SCNx8 "hhx"
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_UINT8_T) && defined(PRIX8)
|
|
# define @KWIML@_INT_PRIX8 PRIX8
|
|
#else
|
|
# define @KWIML@_INT_PRIX8 "X"
|
|
#endif
|
|
|
|
/* 8-bit constants */
|
|
#if defined(INT8_C)
|
|
# define @KWIML@_INT_INT8_C(c) INT8_C(c)
|
|
#else
|
|
# define @KWIML@_INT_INT8_C(c) c
|
|
#endif
|
|
#if defined(UINT8_C)
|
|
# define @KWIML@_INT_UINT8_C(c) UINT8_C(c)
|
|
#else
|
|
# define @KWIML@_INT_UINT8_C(c) c ## u
|
|
#endif
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
#if defined(@KWIML@_INT_HAVE_INT16_T)
|
|
# define @KWIML@_INT_int16_t int16_t
|
|
#else
|
|
# define @KWIML@_INT_int16_t signed short
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_UINT16_T)
|
|
# define @KWIML@_INT_uint16_t uint16_t
|
|
#else
|
|
# define @KWIML@_INT_uint16_t unsigned short
|
|
#endif
|
|
|
|
/* 16-bit d, i */
|
|
#if defined(@KWIML@_INT_HAVE_INT16_T) && defined(PRId16)
|
|
# define @KWIML@_INT_PRId16 PRId16
|
|
#else
|
|
# define @KWIML@_INT_PRId16 "d"
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_INT16_T) && defined(SCNd16)
|
|
# define @KWIML@_INT_SCNd16 SCNd16
|
|
#else
|
|
# define @KWIML@_INT_SCNd16 "hd"
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_INT16_T) && defined(PRIi16)
|
|
# define @KWIML@_INT_PRIi16 PRIi16
|
|
#else
|
|
# define @KWIML@_INT_PRIi16 "i"
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_INT16_T) && defined(SCNi16)
|
|
# define @KWIML@_INT_SCNi16 SCNi16
|
|
#else
|
|
# define @KWIML@_INT_SCNi16 "hi"
|
|
#endif
|
|
|
|
/* 16-bit o, u, x, X */
|
|
#if defined(@KWIML@_INT_HAVE_UINT16_T) && defined(PRIo16)
|
|
# define @KWIML@_INT_PRIo16 PRIo16
|
|
#else
|
|
# define @KWIML@_INT_PRIo16 "o"
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_UINT16_T) && defined(SCNo16)
|
|
# define @KWIML@_INT_SCNo16 SCNo16
|
|
#else
|
|
# define @KWIML@_INT_SCNo16 "ho"
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_UINT16_T) && defined(PRIu16)
|
|
# define @KWIML@_INT_PRIu16 PRIu16
|
|
#else
|
|
# define @KWIML@_INT_PRIu16 "u"
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_UINT16_T) && defined(SCNu16)
|
|
# define @KWIML@_INT_SCNu16 SCNu16
|
|
#else
|
|
# define @KWIML@_INT_SCNu16 "hu"
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_UINT16_T) && defined(PRIx16)
|
|
# define @KWIML@_INT_PRIx16 PRIx16
|
|
#else
|
|
# define @KWIML@_INT_PRIx16 "x"
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_UINT16_T) && defined(SCNx16)
|
|
# define @KWIML@_INT_SCNx16 SCNx16
|
|
#else
|
|
# define @KWIML@_INT_SCNx16 "hx"
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_UINT16_T) && defined(PRIX16)
|
|
# define @KWIML@_INT_PRIX16 PRIX16
|
|
#else
|
|
# define @KWIML@_INT_PRIX16 "X"
|
|
#endif
|
|
|
|
/* 16-bit constants */
|
|
#if defined(INT16_C)
|
|
# define @KWIML@_INT_INT16_C(c) INT16_C(c)
|
|
#else
|
|
# define @KWIML@_INT_INT16_C(c) c
|
|
#endif
|
|
#if defined(UINT16_C)
|
|
# define @KWIML@_INT_UINT16_C(c) UINT16_C(c)
|
|
#else
|
|
# define @KWIML@_INT_UINT16_C(c) c ## u
|
|
#endif
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
#if defined(@KWIML@_INT_HAVE_INT32_T)
|
|
# define @KWIML@_INT_int32_t int32_t
|
|
#else
|
|
# define @KWIML@_INT_int32_t signed int
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_UINT32_T)
|
|
# define @KWIML@_INT_uint32_t uint32_t
|
|
#else
|
|
# define @KWIML@_INT_uint32_t unsigned int
|
|
#endif
|
|
|
|
/* 32-bit d, i */
|
|
#if defined(@KWIML@_INT_HAVE_INT32_T) && defined(PRId32)
|
|
# define @KWIML@_INT_PRId32 PRId32
|
|
#else
|
|
# define @KWIML@_INT_PRId32 "d"
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_INT32_T) && defined(SCNd32)
|
|
# define @KWIML@_INT_SCNd32 SCNd32
|
|
#else
|
|
# define @KWIML@_INT_SCNd32 "d"
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_INT32_T) && defined(PRIi32)
|
|
# define @KWIML@_INT_PRIi32 PRIi32
|
|
#else
|
|
# define @KWIML@_INT_PRIi32 "i"
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_INT32_T) && defined(SCNi32)
|
|
# define @KWIML@_INT_SCNi32 SCNi32
|
|
#else
|
|
# define @KWIML@_INT_SCNi32 "i"
|
|
#endif
|
|
|
|
/* 32-bit o, u, x, X */
|
|
#if defined(@KWIML@_INT_HAVE_UINT32_T) && defined(PRIo32)
|
|
# define @KWIML@_INT_PRIo32 PRIo32
|
|
#else
|
|
# define @KWIML@_INT_PRIo32 "o"
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_UINT32_T) && defined(SCNo32)
|
|
# define @KWIML@_INT_SCNo32 SCNo32
|
|
#else
|
|
# define @KWIML@_INT_SCNo32 "o"
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_UINT32_T) && defined(PRIu32)
|
|
# define @KWIML@_INT_PRIu32 PRIu32
|
|
#else
|
|
# define @KWIML@_INT_PRIu32 "u"
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_UINT32_T) && defined(SCNu32)
|
|
# define @KWIML@_INT_SCNu32 SCNu32
|
|
#else
|
|
# define @KWIML@_INT_SCNu32 "u"
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_UINT32_T) && defined(PRIx32)
|
|
# define @KWIML@_INT_PRIx32 PRIx32
|
|
#else
|
|
# define @KWIML@_INT_PRIx32 "x"
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_UINT32_T) && defined(SCNx32)
|
|
# define @KWIML@_INT_SCNx32 SCNx32
|
|
#else
|
|
# define @KWIML@_INT_SCNx32 "x"
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_UINT32_T) && defined(PRIX32)
|
|
# define @KWIML@_INT_PRIX32 PRIX32
|
|
#else
|
|
# define @KWIML@_INT_PRIX32 "X"
|
|
#endif
|
|
|
|
/* 32-bit constants */
|
|
#if defined(INT32_C)
|
|
# define @KWIML@_INT_INT32_C(c) INT32_C(c)
|
|
#else
|
|
# define @KWIML@_INT_INT32_C(c) c
|
|
#endif
|
|
#if defined(UINT32_C)
|
|
# define @KWIML@_INT_UINT32_C(c) UINT32_C(c)
|
|
#else
|
|
# define @KWIML@_INT_UINT32_C(c) c ## u
|
|
#endif
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
#if defined(@KWIML@_INT_HAVE_INT64_T)
|
|
# define @KWIML@_INT_int64_t int64_t
|
|
#elif @KWIML@_ABI_SIZEOF_LONG == 8
|
|
# define @KWIML@_INT_int64_t signed long
|
|
#elif defined(@KWIML@_ABI_SIZEOF_LONG_LONG) && @KWIML@_ABI_SIZEOF_LONG_LONG == 8
|
|
# define @KWIML@_INT_int64_t signed long long
|
|
#elif defined(@KWIML@_ABI_SIZEOF___INT64)
|
|
# define @KWIML@_INT_int64_t signed __int64
|
|
#elif defined(@KWIML@_INT_NO_ERROR_INT64_T)
|
|
# define @KWIML@_INT_NO_INT64_T
|
|
#else
|
|
# error "No type known for 'int64_t'."
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_UINT64_T)
|
|
# define @KWIML@_INT_uint64_t uint64_t
|
|
#elif @KWIML@_ABI_SIZEOF_LONG == 8
|
|
# define @KWIML@_INT_uint64_t unsigned long
|
|
#elif defined(@KWIML@_ABI_SIZEOF_LONG_LONG) && @KWIML@_ABI_SIZEOF_LONG_LONG == 8
|
|
# define @KWIML@_INT_uint64_t unsigned long long
|
|
#elif defined(@KWIML@_ABI_SIZEOF___INT64)
|
|
# define @KWIML@_INT_uint64_t unsigned __int64
|
|
#elif defined(@KWIML@_INT_NO_ERROR_UINT64_T)
|
|
# define @KWIML@_INT_NO_UINT64_T
|
|
#else
|
|
# error "No type known for 'uint64_t'."
|
|
#endif
|
|
|
|
#if defined(__INTEL_COMPILER)
|
|
#elif defined(__BORLANDC__)
|
|
# define @KWIML@_INT__NO_FMTLL /* type 'long long' but not 'll' format */
|
|
# define @KWIML@_INT_BROKEN_INT64_C /* system macro defined incorrectly */
|
|
# define @KWIML@_INT_BROKEN_UINT64_C /* system macro defined incorrectly */
|
|
#elif defined(_MSC_VER) && _MSC_VER < 1400
|
|
# define @KWIML@_INT__NO_FMTLL /* type 'long long' but not 'll' format */
|
|
#endif
|
|
|
|
#if @KWIML@_ABI_SIZEOF_LONG == 8
|
|
# define @KWIML@_INT__FMT64 "l"
|
|
#elif defined(@KWIML@_ABI_SIZEOF_LONG_LONG) && @KWIML@_ABI_SIZEOF_LONG_LONG == 8
|
|
# if !defined(@KWIML@_INT__NO_FMTLL)
|
|
# define @KWIML@_INT__FMT64 "ll"
|
|
# else
|
|
# define @KWIML@_INT__FMT64 "I64"
|
|
# endif
|
|
#elif defined(@KWIML@_ABI_SIZEOF___INT64)
|
|
# if defined(__BORLANDC__)
|
|
# define @KWIML@_INT__FMT64 "L"
|
|
# else
|
|
# define @KWIML@_INT__FMT64 "I64"
|
|
# endif
|
|
#endif
|
|
|
|
/* 64-bit d, i */
|
|
#if defined(@KWIML@_INT_HAVE_INT64_T) && defined(PRId64)
|
|
# define @KWIML@_INT_PRId64 PRId64
|
|
#elif defined(@KWIML@_INT__FMT64)
|
|
# define @KWIML@_INT_PRId64 @KWIML@_INT__FMT64 "d"
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_INT64_T) && defined(SCNd64)
|
|
# define @KWIML@_INT_SCNd64 SCNd64
|
|
#elif defined(@KWIML@_INT__FMT64) && !defined(@KWIML@_INT__NO_SCN64)
|
|
# define @KWIML@_INT_SCNd64 @KWIML@_INT__FMT64 "d"
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_INT64_T) && defined(PRIi64)
|
|
# define @KWIML@_INT_PRIi64 PRIi64
|
|
#elif defined(@KWIML@_INT__FMT64)
|
|
# define @KWIML@_INT_PRIi64 @KWIML@_INT__FMT64 "d"
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_INT64_T) && defined(SCNi64)
|
|
# define @KWIML@_INT_SCNi64 SCNi64
|
|
#elif defined(@KWIML@_INT__FMT64) && !defined(@KWIML@_INT__NO_SCN64)
|
|
# define @KWIML@_INT_SCNi64 @KWIML@_INT__FMT64 "d"
|
|
#endif
|
|
|
|
/* 64-bit o, u, x, X */
|
|
#if defined(@KWIML@_INT_HAVE_UINT64_T) && defined(PRIo64)
|
|
# define @KWIML@_INT_PRIo64 PRIo64
|
|
#elif defined(@KWIML@_INT__FMT64)
|
|
# define @KWIML@_INT_PRIo64 @KWIML@_INT__FMT64 "o"
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_UINT64_T) && defined(SCNo64)
|
|
# define @KWIML@_INT_SCNo64 SCNo64
|
|
#elif defined(@KWIML@_INT__FMT64) && !defined(@KWIML@_INT__NO_SCN64)
|
|
# define @KWIML@_INT_SCNo64 @KWIML@_INT__FMT64 "o"
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_UINT64_T) && defined(PRIu64)
|
|
# define @KWIML@_INT_PRIu64 PRIu64
|
|
#elif defined(@KWIML@_INT__FMT64)
|
|
# define @KWIML@_INT_PRIu64 @KWIML@_INT__FMT64 "u"
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_UINT64_T) && defined(SCNu64)
|
|
# define @KWIML@_INT_SCNu64 SCNu64
|
|
#elif defined(@KWIML@_INT__FMT64) && !defined(@KWIML@_INT__NO_SCN64)
|
|
# define @KWIML@_INT_SCNu64 @KWIML@_INT__FMT64 "u"
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_UINT64_T) && defined(PRIx64)
|
|
# define @KWIML@_INT_PRIx64 PRIx64
|
|
#elif defined(@KWIML@_INT__FMT64)
|
|
# define @KWIML@_INT_PRIx64 @KWIML@_INT__FMT64 "x"
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_UINT64_T) && defined(SCNx64)
|
|
# define @KWIML@_INT_SCNx64 SCNx64
|
|
#elif defined(@KWIML@_INT__FMT64) && !defined(@KWIML@_INT__NO_SCN64)
|
|
# define @KWIML@_INT_SCNx64 @KWIML@_INT__FMT64 "x"
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_UINT64_T) && defined(PRIX64)
|
|
# define @KWIML@_INT_PRIX64 PRIX64
|
|
#elif defined(@KWIML@_INT__FMT64)
|
|
# define @KWIML@_INT_PRIX64 @KWIML@_INT__FMT64 "X"
|
|
#endif
|
|
|
|
/* 64-bit constants */
|
|
#if defined(@KWIML@_INT_HAVE_INT64_T) && defined(INT64_C) \
|
|
&& !defined(@KWIML@_INT_BROKEN_INT64_C)
|
|
# define @KWIML@_INT_INT64_C(c) INT64_C(c)
|
|
#elif @KWIML@_ABI_SIZEOF_LONG == 8
|
|
# define @KWIML@_INT_INT64_C(c) c ## l
|
|
#elif defined(@KWIML@_ABI_SIZEOF_LONG_LONG) && @KWIML@_ABI_SIZEOF_LONG_LONG == 8
|
|
# define @KWIML@_INT_INT64_C(c) c ## ll
|
|
#elif defined(@KWIML@_ABI_SIZEOF___INT64)
|
|
# define @KWIML@_INT_INT64_C(c) c ## i64
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_UINT64_T) && defined(UINT64_C) \
|
|
&& !defined(@KWIML@_INT_BROKEN_UINT64_C)
|
|
# define @KWIML@_INT_UINT64_C(c) UINT64_C(c)
|
|
#elif @KWIML@_ABI_SIZEOF_LONG == 8
|
|
# define @KWIML@_INT_UINT64_C(c) c ## ul
|
|
#elif defined(@KWIML@_ABI_SIZEOF_LONG_LONG) && @KWIML@_ABI_SIZEOF_LONG_LONG == 8
|
|
# define @KWIML@_INT_UINT64_C(c) c ## ull
|
|
#elif defined(@KWIML@_ABI_SIZEOF___INT64)
|
|
# define @KWIML@_INT_UINT64_C(c) c ## ui64
|
|
#endif
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
#if defined(@KWIML@_INT_HAVE_INTPTR_T)
|
|
# define @KWIML@_INT_intptr_t intptr_t
|
|
#elif @KWIML@_ABI_SIZEOF_DATA_PTR == 4
|
|
# define @KWIML@_INT_intptr_t @KWIML@_INT_int32_t
|
|
#elif !defined(@KWIML@_INT_NO_INT64_T)
|
|
# define @KWIML@_INT_intptr_t @KWIML@_INT_int64_t
|
|
#elif defined(@KWIML@_INT_NO_ERROR_INTPTR_T)
|
|
# define @KWIML@_INT_NO_INTPTR_T
|
|
#else
|
|
# error "No type known for 'intptr_t'."
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_UINTPTR_T)
|
|
# define @KWIML@_INT_uintptr_t uintptr_t
|
|
#elif @KWIML@_ABI_SIZEOF_DATA_PTR == 4
|
|
# define @KWIML@_INT_uintptr_t @KWIML@_INT_uint32_t
|
|
#elif !defined(@KWIML@_INT_NO_UINT64_T)
|
|
# define @KWIML@_INT_uintptr_t @KWIML@_INT_uint64_t
|
|
#elif defined(@KWIML@_INT_NO_ERROR_UINTPTR_T)
|
|
# define @KWIML@_INT_NO_UINTPTR_T
|
|
#else
|
|
# error "No type known for 'uintptr_t'."
|
|
#endif
|
|
|
|
#if defined(@KWIML@_INT_HAVE_INTPTR_T) && defined(PRIdPTR)
|
|
# define @KWIML@_INT_PRIdPTR PRIdPTR
|
|
#elif @KWIML@_ABI_SIZEOF_DATA_PTR == 4
|
|
# define @KWIML@_INT_PRIdPTR @KWIML@_INT_PRId32
|
|
#elif !defined(@KWIML@_INT_NO_UINT64_T)
|
|
# define @KWIML@_INT_PRIdPTR @KWIML@_INT_PRId64
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_INTPTR_T) && defined(SCNdPTR)
|
|
# define @KWIML@_INT_SCNdPTR SCNdPTR
|
|
#elif @KWIML@_ABI_SIZEOF_DATA_PTR == 4
|
|
# define @KWIML@_INT_SCNdPTR @KWIML@_INT_SCNd32
|
|
#elif !defined(@KWIML@_INT_NO_UINT64_T)
|
|
# define @KWIML@_INT_SCNdPTR @KWIML@_INT_SCNd64
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_INTPTR_T) && defined(PRIiPTR)
|
|
# define @KWIML@_INT_PRIiPTR PRIiPTR
|
|
#elif @KWIML@_ABI_SIZEOF_DATA_PTR == 4
|
|
# define @KWIML@_INT_PRIiPTR @KWIML@_INT_PRIi32
|
|
#elif !defined(@KWIML@_INT_NO_UINT64_T)
|
|
# define @KWIML@_INT_PRIiPTR @KWIML@_INT_PRIi64
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_INTPTR_T) && defined(SCNiPTR)
|
|
# define @KWIML@_INT_SCNiPTR SCNiPTR
|
|
#elif @KWIML@_ABI_SIZEOF_DATA_PTR == 4
|
|
# define @KWIML@_INT_SCNiPTR @KWIML@_INT_SCNi32
|
|
#elif !defined(@KWIML@_INT_NO_UINT64_T)
|
|
# define @KWIML@_INT_SCNiPTR @KWIML@_INT_SCNi64
|
|
#endif
|
|
|
|
#if defined(@KWIML@_INT_HAVE_UINTPTR_T) && defined(PRIoPTR)
|
|
# define @KWIML@_INT_PRIoPTR PRIoPTR
|
|
#elif @KWIML@_ABI_SIZEOF_DATA_PTR == 4
|
|
# define @KWIML@_INT_PRIoPTR @KWIML@_INT_PRIo32
|
|
#elif !defined(@KWIML@_INT_NO_UINT64_T)
|
|
# define @KWIML@_INT_PRIoPTR @KWIML@_INT_PRIo64
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_UINTPTR_T) && defined(SCNoPTR)
|
|
# define @KWIML@_INT_SCNoPTR SCNoPTR
|
|
#elif @KWIML@_ABI_SIZEOF_DATA_PTR == 4
|
|
# define @KWIML@_INT_SCNoPTR @KWIML@_INT_SCNo32
|
|
#elif !defined(@KWIML@_INT_NO_UINT64_T)
|
|
# define @KWIML@_INT_SCNoPTR @KWIML@_INT_SCNo64
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_UINTPTR_T) && defined(PRIuPTR)
|
|
# define @KWIML@_INT_PRIuPTR PRIuPTR
|
|
#elif @KWIML@_ABI_SIZEOF_DATA_PTR == 4
|
|
# define @KWIML@_INT_PRIuPTR @KWIML@_INT_PRIu32
|
|
#elif !defined(@KWIML@_INT_NO_UINT64_T)
|
|
# define @KWIML@_INT_PRIuPTR @KWIML@_INT_PRIu64
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_UINTPTR_T) && defined(SCNuPTR)
|
|
# define @KWIML@_INT_SCNuPTR SCNuPTR
|
|
#elif @KWIML@_ABI_SIZEOF_DATA_PTR == 4
|
|
# define @KWIML@_INT_SCNuPTR @KWIML@_INT_SCNu32
|
|
#elif !defined(@KWIML@_INT_NO_UINT64_T)
|
|
# define @KWIML@_INT_SCNuPTR @KWIML@_INT_SCNu64
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_UINTPTR_T) && defined(PRIxPTR)
|
|
# define @KWIML@_INT_PRIxPTR PRIxPTR
|
|
#elif @KWIML@_ABI_SIZEOF_DATA_PTR == 4
|
|
# define @KWIML@_INT_PRIxPTR @KWIML@_INT_PRIx32
|
|
#elif !defined(@KWIML@_INT_NO_UINT64_T)
|
|
# define @KWIML@_INT_PRIxPTR @KWIML@_INT_PRIx64
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_UINTPTR_T) && defined(SCNxPTR)
|
|
# define @KWIML@_INT_SCNxPTR SCNxPTR
|
|
#elif @KWIML@_ABI_SIZEOF_DATA_PTR == 4
|
|
# define @KWIML@_INT_SCNxPTR @KWIML@_INT_SCNx32
|
|
#elif !defined(@KWIML@_INT_NO_UINT64_T)
|
|
# define @KWIML@_INT_SCNxPTR @KWIML@_INT_SCNx64
|
|
#endif
|
|
#if defined(@KWIML@_INT_HAVE_UINTPTR_T) && defined(PRIXPTR)
|
|
# define @KWIML@_INT_PRIXPTR PRIXPTR
|
|
#elif @KWIML@_ABI_SIZEOF_DATA_PTR == 4
|
|
# define @KWIML@_INT_PRIXPTR @KWIML@_INT_PRIX32
|
|
#elif !defined(@KWIML@_INT_NO_UINT64_T)
|
|
# define @KWIML@_INT_PRIXPTR @KWIML@_INT_PRIX64
|
|
#endif
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
#if !defined(@KWIML@_INT_NO_VERIFY)
|
|
#define @KWIML@_INT__VERIFY(n, x, y) extern int (*n)[x]; extern int (*n)[y]
|
|
#define @KWIML@_INT__VERIFY_BOOL(m, b) @KWIML@_INT__VERIFY(m##__VERIFY__, 2, (b)?2:3)
|
|
#define @KWIML@_INT__VERIFY_TYPE(t, s) @KWIML@_INT__VERIFY(t##__VERIFY__, s, sizeof(t))
|
|
#define @KWIML@_INT__VERIFY_SIGN(t, u, o) @KWIML@_INT__VERIFY_BOOL(t##__SIGN, (t)((u)1 << ((sizeof(t)<<3)-1)) o 0)
|
|
|
|
@KWIML@_INT__VERIFY_TYPE(@KWIML@_INT_int8_t, 1);
|
|
@KWIML@_INT__VERIFY_TYPE(@KWIML@_INT_uint8_t, 1);
|
|
@KWIML@_INT__VERIFY_TYPE(@KWIML@_INT_int16_t, 2);
|
|
@KWIML@_INT__VERIFY_TYPE(@KWIML@_INT_uint16_t, 2);
|
|
@KWIML@_INT__VERIFY_TYPE(@KWIML@_INT_int32_t, 4);
|
|
@KWIML@_INT__VERIFY_TYPE(@KWIML@_INT_uint32_t, 4);
|
|
#if !defined(@KWIML@_INT_NO_INT64_T)
|
|
@KWIML@_INT__VERIFY_TYPE(@KWIML@_INT_int64_t, 8);
|
|
#endif
|
|
#if !defined(@KWIML@_INT_NO_UINT64_T)
|
|
@KWIML@_INT__VERIFY_TYPE(@KWIML@_INT_uint64_t, 8);
|
|
#endif
|
|
#if !defined(@KWIML@_INT_NO_INTPTR_T)
|
|
@KWIML@_INT__VERIFY_TYPE(@KWIML@_INT_intptr_t, sizeof(void*));
|
|
#endif
|
|
#if !defined(@KWIML@_INT_NO_UINTPTR_T)
|
|
@KWIML@_INT__VERIFY_TYPE(@KWIML@_INT_uintptr_t, sizeof(void*));
|
|
#endif
|
|
|
|
@KWIML@_INT__VERIFY_SIGN(@KWIML@_INT_int8_t, @KWIML@_INT_uint8_t, <);
|
|
@KWIML@_INT__VERIFY_SIGN(@KWIML@_INT_uint8_t, @KWIML@_INT_uint8_t, >);
|
|
@KWIML@_INT__VERIFY_SIGN(@KWIML@_INT_int16_t, @KWIML@_INT_uint16_t, <);
|
|
@KWIML@_INT__VERIFY_SIGN(@KWIML@_INT_uint16_t, @KWIML@_INT_uint16_t, >);
|
|
@KWIML@_INT__VERIFY_SIGN(@KWIML@_INT_int32_t, @KWIML@_INT_uint32_t, <);
|
|
@KWIML@_INT__VERIFY_SIGN(@KWIML@_INT_uint32_t, @KWIML@_INT_uint32_t, >);
|
|
#if !defined(@KWIML@_INT_NO_INT64_T)
|
|
@KWIML@_INT__VERIFY_SIGN(@KWIML@_INT_int64_t, @KWIML@_INT_uint64_t, <);
|
|
#endif
|
|
#if !defined(@KWIML@_INT_NO_UINT64_T)
|
|
@KWIML@_INT__VERIFY_SIGN(@KWIML@_INT_uint64_t, @KWIML@_INT_uint64_t, >);
|
|
#endif
|
|
#if !defined(@KWIML@_INT_NO_INTPTR_T)
|
|
@KWIML@_INT__VERIFY_SIGN(@KWIML@_INT_intptr_t, @KWIML@_INT_uintptr_t, <);
|
|
#endif
|
|
#if !defined(@KWIML@_INT_NO_UINTPTR_T)
|
|
@KWIML@_INT__VERIFY_SIGN(@KWIML@_INT_uintptr_t, @KWIML@_INT_uintptr_t, >);
|
|
#endif
|
|
|
|
#undef @KWIML@_INT__VERIFY_SIGN
|
|
#undef @KWIML@_INT__VERIFY_TYPE
|
|
#undef @KWIML@_INT__VERIFY_BOOL
|
|
#undef @KWIML@_INT__VERIFY
|
|
|
|
#endif
|
|
|
|
#endif
|