1*2e9d4914SAndroid Build Coastguard Worker // ISO C9x compliant stdint.h for Microsoft Visual Studio 2*2e9d4914SAndroid Build Coastguard Worker // Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 3*2e9d4914SAndroid Build Coastguard Worker // 4*2e9d4914SAndroid Build Coastguard Worker // Copyright (c) 2006 Alexander Chemeris 5*2e9d4914SAndroid Build Coastguard Worker // 6*2e9d4914SAndroid Build Coastguard Worker // Redistribution and use in source and binary forms, with or without 7*2e9d4914SAndroid Build Coastguard Worker // modification, are permitted provided that the following conditions are met: 8*2e9d4914SAndroid Build Coastguard Worker // 9*2e9d4914SAndroid Build Coastguard Worker // 1. Redistributions of source code must retain the above copyright notice, 10*2e9d4914SAndroid Build Coastguard Worker // this list of conditions and the following disclaimer. 11*2e9d4914SAndroid Build Coastguard Worker // 12*2e9d4914SAndroid Build Coastguard Worker // 2. Redistributions in binary form must reproduce the above copyright 13*2e9d4914SAndroid Build Coastguard Worker // notice, this list of conditions and the following disclaimer in the 14*2e9d4914SAndroid Build Coastguard Worker // documentation and/or other materials provided with the distribution. 15*2e9d4914SAndroid Build Coastguard Worker // 16*2e9d4914SAndroid Build Coastguard Worker // 3. The name of the author may be used to endorse or promote products 17*2e9d4914SAndroid Build Coastguard Worker // derived from this software without specific prior written permission. 18*2e9d4914SAndroid Build Coastguard Worker // 19*2e9d4914SAndroid Build Coastguard Worker // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 20*2e9d4914SAndroid Build Coastguard Worker // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 21*2e9d4914SAndroid Build Coastguard Worker // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 22*2e9d4914SAndroid Build Coastguard Worker // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23*2e9d4914SAndroid Build Coastguard Worker // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 24*2e9d4914SAndroid Build Coastguard Worker // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 25*2e9d4914SAndroid Build Coastguard Worker // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 26*2e9d4914SAndroid Build Coastguard Worker // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 27*2e9d4914SAndroid Build Coastguard Worker // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 28*2e9d4914SAndroid Build Coastguard Worker // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29*2e9d4914SAndroid Build Coastguard Worker // 30*2e9d4914SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////// 31*2e9d4914SAndroid Build Coastguard Worker 32*2e9d4914SAndroid Build Coastguard Worker #ifndef _MSC_VER // [ 33*2e9d4914SAndroid Build Coastguard Worker #error "Use this header only with Microsoft Visual C++ compilers!" 34*2e9d4914SAndroid Build Coastguard Worker #endif // _MSC_VER ] 35*2e9d4914SAndroid Build Coastguard Worker 36*2e9d4914SAndroid Build Coastguard Worker #ifndef _MSC_STDINT_H_ // [ 37*2e9d4914SAndroid Build Coastguard Worker #define _MSC_STDINT_H_ 38*2e9d4914SAndroid Build Coastguard Worker 39*2e9d4914SAndroid Build Coastguard Worker #if _MSC_VER > 1000 40*2e9d4914SAndroid Build Coastguard Worker #pragma once 41*2e9d4914SAndroid Build Coastguard Worker #endif 42*2e9d4914SAndroid Build Coastguard Worker 43*2e9d4914SAndroid Build Coastguard Worker #include <limits.h> 44*2e9d4914SAndroid Build Coastguard Worker 45*2e9d4914SAndroid Build Coastguard Worker // For Visual Studio 6 in C++ mode wrap <wchar.h> include with 'extern "C++" {}' 46*2e9d4914SAndroid Build Coastguard Worker // or compiler give many errors like this: 47*2e9d4914SAndroid Build Coastguard Worker // error C2733: second C linkage of overloaded function 'wmemchr' not allowed 48*2e9d4914SAndroid Build Coastguard Worker #if (_MSC_VER < 1300) && defined(__cplusplus) 49*2e9d4914SAndroid Build Coastguard Worker extern "C++" { 50*2e9d4914SAndroid Build Coastguard Worker #endif 51*2e9d4914SAndroid Build Coastguard Worker # include <wchar.h> 52*2e9d4914SAndroid Build Coastguard Worker #if (_MSC_VER < 1300) && defined(__cplusplus) 53*2e9d4914SAndroid Build Coastguard Worker } 54*2e9d4914SAndroid Build Coastguard Worker #endif 55*2e9d4914SAndroid Build Coastguard Worker 56*2e9d4914SAndroid Build Coastguard Worker // 7.18.1 Integer types 57*2e9d4914SAndroid Build Coastguard Worker 58*2e9d4914SAndroid Build Coastguard Worker // 7.18.1.1 Exact-width integer types 59*2e9d4914SAndroid Build Coastguard Worker typedef __int8 int8_t; 60*2e9d4914SAndroid Build Coastguard Worker typedef __int16 int16_t; 61*2e9d4914SAndroid Build Coastguard Worker typedef __int32 int32_t; 62*2e9d4914SAndroid Build Coastguard Worker typedef __int64 int64_t; 63*2e9d4914SAndroid Build Coastguard Worker typedef unsigned __int8 uint8_t; 64*2e9d4914SAndroid Build Coastguard Worker typedef unsigned __int16 uint16_t; 65*2e9d4914SAndroid Build Coastguard Worker typedef unsigned __int32 uint32_t; 66*2e9d4914SAndroid Build Coastguard Worker typedef unsigned __int64 uint64_t; 67*2e9d4914SAndroid Build Coastguard Worker 68*2e9d4914SAndroid Build Coastguard Worker // 7.18.1.2 Minimum-width integer types 69*2e9d4914SAndroid Build Coastguard Worker typedef int8_t int_least8_t; 70*2e9d4914SAndroid Build Coastguard Worker typedef int16_t int_least16_t; 71*2e9d4914SAndroid Build Coastguard Worker typedef int32_t int_least32_t; 72*2e9d4914SAndroid Build Coastguard Worker typedef int64_t int_least64_t; 73*2e9d4914SAndroid Build Coastguard Worker typedef uint8_t uint_least8_t; 74*2e9d4914SAndroid Build Coastguard Worker typedef uint16_t uint_least16_t; 75*2e9d4914SAndroid Build Coastguard Worker typedef uint32_t uint_least32_t; 76*2e9d4914SAndroid Build Coastguard Worker typedef uint64_t uint_least64_t; 77*2e9d4914SAndroid Build Coastguard Worker 78*2e9d4914SAndroid Build Coastguard Worker // 7.18.1.3 Fastest minimum-width integer types 79*2e9d4914SAndroid Build Coastguard Worker typedef int8_t int_fast8_t; 80*2e9d4914SAndroid Build Coastguard Worker typedef int16_t int_fast16_t; 81*2e9d4914SAndroid Build Coastguard Worker typedef int32_t int_fast32_t; 82*2e9d4914SAndroid Build Coastguard Worker typedef int64_t int_fast64_t; 83*2e9d4914SAndroid Build Coastguard Worker typedef uint8_t uint_fast8_t; 84*2e9d4914SAndroid Build Coastguard Worker typedef uint16_t uint_fast16_t; 85*2e9d4914SAndroid Build Coastguard Worker typedef uint32_t uint_fast32_t; 86*2e9d4914SAndroid Build Coastguard Worker typedef uint64_t uint_fast64_t; 87*2e9d4914SAndroid Build Coastguard Worker 88*2e9d4914SAndroid Build Coastguard Worker // 7.18.1.4 Integer types capable of holding object pointers 89*2e9d4914SAndroid Build Coastguard Worker #ifdef _WIN64 // [ 90*2e9d4914SAndroid Build Coastguard Worker typedef __int64 intptr_t; 91*2e9d4914SAndroid Build Coastguard Worker typedef unsigned __int64 uintptr_t; 92*2e9d4914SAndroid Build Coastguard Worker #else // _WIN64 ][ 93*2e9d4914SAndroid Build Coastguard Worker typedef int intptr_t; 94*2e9d4914SAndroid Build Coastguard Worker typedef unsigned int uintptr_t; 95*2e9d4914SAndroid Build Coastguard Worker #endif // _WIN64 ] 96*2e9d4914SAndroid Build Coastguard Worker 97*2e9d4914SAndroid Build Coastguard Worker // 7.18.1.5 Greatest-width integer types 98*2e9d4914SAndroid Build Coastguard Worker typedef int64_t intmax_t; 99*2e9d4914SAndroid Build Coastguard Worker typedef uint64_t uintmax_t; 100*2e9d4914SAndroid Build Coastguard Worker 101*2e9d4914SAndroid Build Coastguard Worker 102*2e9d4914SAndroid Build Coastguard Worker // 7.18.2 Limits of specified-width integer types 103*2e9d4914SAndroid Build Coastguard Worker 104*2e9d4914SAndroid Build Coastguard Worker #if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [ See footnote 220 at page 257 and footnote 221 at page 259 105*2e9d4914SAndroid Build Coastguard Worker 106*2e9d4914SAndroid Build Coastguard Worker // 7.18.2.1 Limits of exact-width integer types 107*2e9d4914SAndroid Build Coastguard Worker #define INT8_MIN ((int8_t)_I8_MIN) 108*2e9d4914SAndroid Build Coastguard Worker #define INT8_MAX _I8_MAX 109*2e9d4914SAndroid Build Coastguard Worker #define INT16_MIN ((int16_t)_I16_MIN) 110*2e9d4914SAndroid Build Coastguard Worker #define INT16_MAX _I16_MAX 111*2e9d4914SAndroid Build Coastguard Worker #define INT32_MIN ((int32_t)_I32_MIN) 112*2e9d4914SAndroid Build Coastguard Worker #define INT32_MAX _I32_MAX 113*2e9d4914SAndroid Build Coastguard Worker #define INT64_MIN ((int64_t)_I64_MIN) 114*2e9d4914SAndroid Build Coastguard Worker #define INT64_MAX _I64_MAX 115*2e9d4914SAndroid Build Coastguard Worker #define UINT8_MAX _UI8_MAX 116*2e9d4914SAndroid Build Coastguard Worker #define UINT16_MAX _UI16_MAX 117*2e9d4914SAndroid Build Coastguard Worker #define UINT32_MAX _UI32_MAX 118*2e9d4914SAndroid Build Coastguard Worker #define UINT64_MAX _UI64_MAX 119*2e9d4914SAndroid Build Coastguard Worker 120*2e9d4914SAndroid Build Coastguard Worker // 7.18.2.2 Limits of minimum-width integer types 121*2e9d4914SAndroid Build Coastguard Worker #define INT_LEAST8_MIN INT8_MIN 122*2e9d4914SAndroid Build Coastguard Worker #define INT_LEAST8_MAX INT8_MAX 123*2e9d4914SAndroid Build Coastguard Worker #define INT_LEAST16_MIN INT16_MIN 124*2e9d4914SAndroid Build Coastguard Worker #define INT_LEAST16_MAX INT16_MAX 125*2e9d4914SAndroid Build Coastguard Worker #define INT_LEAST32_MIN INT32_MIN 126*2e9d4914SAndroid Build Coastguard Worker #define INT_LEAST32_MAX INT32_MAX 127*2e9d4914SAndroid Build Coastguard Worker #define INT_LEAST64_MIN INT64_MIN 128*2e9d4914SAndroid Build Coastguard Worker #define INT_LEAST64_MAX INT64_MAX 129*2e9d4914SAndroid Build Coastguard Worker #define UINT_LEAST8_MAX UINT8_MAX 130*2e9d4914SAndroid Build Coastguard Worker #define UINT_LEAST16_MAX UINT16_MAX 131*2e9d4914SAndroid Build Coastguard Worker #define UINT_LEAST32_MAX UINT32_MAX 132*2e9d4914SAndroid Build Coastguard Worker #define UINT_LEAST64_MAX UINT64_MAX 133*2e9d4914SAndroid Build Coastguard Worker 134*2e9d4914SAndroid Build Coastguard Worker // 7.18.2.3 Limits of fastest minimum-width integer types 135*2e9d4914SAndroid Build Coastguard Worker #define INT_FAST8_MIN INT8_MIN 136*2e9d4914SAndroid Build Coastguard Worker #define INT_FAST8_MAX INT8_MAX 137*2e9d4914SAndroid Build Coastguard Worker #define INT_FAST16_MIN INT16_MIN 138*2e9d4914SAndroid Build Coastguard Worker #define INT_FAST16_MAX INT16_MAX 139*2e9d4914SAndroid Build Coastguard Worker #define INT_FAST32_MIN INT32_MIN 140*2e9d4914SAndroid Build Coastguard Worker #define INT_FAST32_MAX INT32_MAX 141*2e9d4914SAndroid Build Coastguard Worker #define INT_FAST64_MIN INT64_MIN 142*2e9d4914SAndroid Build Coastguard Worker #define INT_FAST64_MAX INT64_MAX 143*2e9d4914SAndroid Build Coastguard Worker #define UINT_FAST8_MAX UINT8_MAX 144*2e9d4914SAndroid Build Coastguard Worker #define UINT_FAST16_MAX UINT16_MAX 145*2e9d4914SAndroid Build Coastguard Worker #define UINT_FAST32_MAX UINT32_MAX 146*2e9d4914SAndroid Build Coastguard Worker #define UINT_FAST64_MAX UINT64_MAX 147*2e9d4914SAndroid Build Coastguard Worker 148*2e9d4914SAndroid Build Coastguard Worker // 7.18.2.4 Limits of integer types capable of holding object pointers 149*2e9d4914SAndroid Build Coastguard Worker #ifdef _WIN64 // [ 150*2e9d4914SAndroid Build Coastguard Worker # define INTPTR_MIN INT64_MIN 151*2e9d4914SAndroid Build Coastguard Worker # define INTPTR_MAX INT64_MAX 152*2e9d4914SAndroid Build Coastguard Worker # define UINTPTR_MAX UINT64_MAX 153*2e9d4914SAndroid Build Coastguard Worker #else // _WIN64 ][ 154*2e9d4914SAndroid Build Coastguard Worker # define INTPTR_MIN INT32_MIN 155*2e9d4914SAndroid Build Coastguard Worker # define INTPTR_MAX INT32_MAX 156*2e9d4914SAndroid Build Coastguard Worker # define UINTPTR_MAX UINT32_MAX 157*2e9d4914SAndroid Build Coastguard Worker #endif // _WIN64 ] 158*2e9d4914SAndroid Build Coastguard Worker 159*2e9d4914SAndroid Build Coastguard Worker // 7.18.2.5 Limits of greatest-width integer types 160*2e9d4914SAndroid Build Coastguard Worker #define INTMAX_MIN INT64_MIN 161*2e9d4914SAndroid Build Coastguard Worker #define INTMAX_MAX INT64_MAX 162*2e9d4914SAndroid Build Coastguard Worker #define UINTMAX_MAX UINT64_MAX 163*2e9d4914SAndroid Build Coastguard Worker 164*2e9d4914SAndroid Build Coastguard Worker // 7.18.3 Limits of other integer types 165*2e9d4914SAndroid Build Coastguard Worker 166*2e9d4914SAndroid Build Coastguard Worker #ifdef _WIN64 // [ 167*2e9d4914SAndroid Build Coastguard Worker # define PTRDIFF_MIN _I64_MIN 168*2e9d4914SAndroid Build Coastguard Worker # define PTRDIFF_MAX _I64_MAX 169*2e9d4914SAndroid Build Coastguard Worker #else // _WIN64 ][ 170*2e9d4914SAndroid Build Coastguard Worker # define PTRDIFF_MIN _I32_MIN 171*2e9d4914SAndroid Build Coastguard Worker # define PTRDIFF_MAX _I32_MAX 172*2e9d4914SAndroid Build Coastguard Worker #endif // _WIN64 ] 173*2e9d4914SAndroid Build Coastguard Worker 174*2e9d4914SAndroid Build Coastguard Worker #define SIG_ATOMIC_MIN INT_MIN 175*2e9d4914SAndroid Build Coastguard Worker #define SIG_ATOMIC_MAX INT_MAX 176*2e9d4914SAndroid Build Coastguard Worker 177*2e9d4914SAndroid Build Coastguard Worker #ifndef SIZE_MAX // [ 178*2e9d4914SAndroid Build Coastguard Worker # ifdef _WIN64 // [ 179*2e9d4914SAndroid Build Coastguard Worker # define SIZE_MAX _UI64_MAX 180*2e9d4914SAndroid Build Coastguard Worker # else // _WIN64 ][ 181*2e9d4914SAndroid Build Coastguard Worker # define SIZE_MAX _UI32_MAX 182*2e9d4914SAndroid Build Coastguard Worker # endif // _WIN64 ] 183*2e9d4914SAndroid Build Coastguard Worker #endif // SIZE_MAX ] 184*2e9d4914SAndroid Build Coastguard Worker 185*2e9d4914SAndroid Build Coastguard Worker // WCHAR_MIN and WCHAR_MAX are also defined in <wchar.h> 186*2e9d4914SAndroid Build Coastguard Worker #ifndef WCHAR_MIN // [ 187*2e9d4914SAndroid Build Coastguard Worker # define WCHAR_MIN 0 188*2e9d4914SAndroid Build Coastguard Worker #endif // WCHAR_MIN ] 189*2e9d4914SAndroid Build Coastguard Worker #ifndef WCHAR_MAX // [ 190*2e9d4914SAndroid Build Coastguard Worker # define WCHAR_MAX _UI16_MAX 191*2e9d4914SAndroid Build Coastguard Worker #endif // WCHAR_MAX ] 192*2e9d4914SAndroid Build Coastguard Worker 193*2e9d4914SAndroid Build Coastguard Worker #define WINT_MIN 0 194*2e9d4914SAndroid Build Coastguard Worker #define WINT_MAX _UI16_MAX 195*2e9d4914SAndroid Build Coastguard Worker 196*2e9d4914SAndroid Build Coastguard Worker #endif // __STDC_LIMIT_MACROS ] 197*2e9d4914SAndroid Build Coastguard Worker 198*2e9d4914SAndroid Build Coastguard Worker 199*2e9d4914SAndroid Build Coastguard Worker // 7.18.4 Limits of other integer types 200*2e9d4914SAndroid Build Coastguard Worker 201*2e9d4914SAndroid Build Coastguard Worker #if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [ See footnote 224 at page 260 202*2e9d4914SAndroid Build Coastguard Worker 203*2e9d4914SAndroid Build Coastguard Worker // 7.18.4.1 Macros for minimum-width integer constants 204*2e9d4914SAndroid Build Coastguard Worker 205*2e9d4914SAndroid Build Coastguard Worker #define INT8_C(val) val##i8 206*2e9d4914SAndroid Build Coastguard Worker #define INT16_C(val) val##i16 207*2e9d4914SAndroid Build Coastguard Worker #define INT32_C(val) val##i32 208*2e9d4914SAndroid Build Coastguard Worker #define INT64_C(val) val##i64 209*2e9d4914SAndroid Build Coastguard Worker 210*2e9d4914SAndroid Build Coastguard Worker #define UINT8_C(val) val##ui8 211*2e9d4914SAndroid Build Coastguard Worker #define UINT16_C(val) val##ui16 212*2e9d4914SAndroid Build Coastguard Worker #define UINT32_C(val) val##ui32 213*2e9d4914SAndroid Build Coastguard Worker #define UINT64_C(val) val##ui64 214*2e9d4914SAndroid Build Coastguard Worker 215*2e9d4914SAndroid Build Coastguard Worker // 7.18.4.2 Macros for greatest-width integer constants 216*2e9d4914SAndroid Build Coastguard Worker #define INTMAX_C INT64_C 217*2e9d4914SAndroid Build Coastguard Worker #define UINTMAX_C UINT64_C 218*2e9d4914SAndroid Build Coastguard Worker 219*2e9d4914SAndroid Build Coastguard Worker #endif // __STDC_CONSTANT_MACROS ] 220*2e9d4914SAndroid Build Coastguard Worker 221*2e9d4914SAndroid Build Coastguard Worker #endif // _MSC_STDINT_H_ ] 222