00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00031
00032 #ifndef _MSC_VER // [
00033 #error "Use this header only with Microsoft Visual C++ compilers!"
00034 #endif // _MSC_VER ]
00035
00036 #if _MSC_VER == 1600
00037 # include <c:\Program Files\Microsoft Visual Studio 10.0\VC\include\stdint.h>
00038 #elif _MSC_VER == 1700
00039 # include <c:\Program Files\Microsoft Visual Studio 11.0\VC\include\stdint.h>
00040 #elif !defined _MSC_STDINT_H_ // [
00041 #define _MSC_STDINT_H_
00042
00043 #if _MSC_VER > 1000
00044 #pragma once
00045 #endif
00046
00047 #if !defined(_MSC_VER) || _MSC_VER >= 1600
00048 #warning "This file should be used only with Visual Studio 2008 and older. (Other compilers atredy have this file.)"
00049 #endif
00050
00051 #include <limits.h>
00052
00053
00054
00055
00056
00057 #ifdef __cplusplus
00058 extern "C" {
00059 #endif
00060 # include <wchar.h>
00061 #ifdef __cplusplus
00062 }
00063 #endif
00064
00065
00066 #ifndef _W64
00067 # if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300
00068 # define _W64 __w64
00069 # else
00070 # define _W64
00071 # endif
00072 #endif
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082 #if (_MSC_VER < 1300)
00083 typedef signed char int8_t;
00084 typedef signed short int16_t;
00085 typedef signed int int32_t;
00086 typedef unsigned char uint8_t;
00087 typedef unsigned short uint16_t;
00088 typedef unsigned int uint32_t;
00089 #else
00090 typedef signed __int8 int8_t;
00091 typedef signed __int16 int16_t;
00092 typedef signed __int32 int32_t;
00093 typedef unsigned __int8 uint8_t;
00094 typedef unsigned __int16 uint16_t;
00095 typedef unsigned __int32 uint32_t;
00096 #endif
00097 typedef signed __int64 int64_t;
00098 typedef unsigned __int64 uint64_t;
00099
00100
00101
00102 typedef int8_t int_least8_t;
00103 typedef int16_t int_least16_t;
00104 typedef int32_t int_least32_t;
00105 typedef int64_t int_least64_t;
00106 typedef uint8_t uint_least8_t;
00107 typedef uint16_t uint_least16_t;
00108 typedef uint32_t uint_least32_t;
00109 typedef uint64_t uint_least64_t;
00110
00111
00112 typedef int8_t int_fast8_t;
00113 typedef int16_t int_fast16_t;
00114 typedef int32_t int_fast32_t;
00115 typedef int64_t int_fast64_t;
00116 typedef uint8_t uint_fast8_t;
00117 typedef uint16_t uint_fast16_t;
00118 typedef uint32_t uint_fast32_t;
00119 typedef uint64_t uint_fast64_t;
00120
00121
00122 #ifdef _WIN64 // [
00123 typedef signed __int64 intptr_t;
00124 typedef unsigned __int64 uintptr_t;
00125 #else // _WIN64 ][
00126 typedef _W64 signed int intptr_t;
00127 typedef _W64 unsigned int uintptr_t;
00128 #endif // _WIN64 ]
00129
00130
00131 typedef int64_t intmax_t;
00132 typedef uint64_t uintmax_t;
00133
00134
00135
00136
00137 #if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [ See footnote 220 at page 257 and footnote 221 at page 259
00138
00139
00140 #define INT8_MIN ((int8_t)_I8_MIN)
00141 #define INT8_MAX _I8_MAX
00142 #define INT16_MIN ((int16_t)_I16_MIN)
00143 #define INT16_MAX _I16_MAX
00144 #define INT32_MIN ((int32_t)_I32_MIN)
00145 #define INT32_MAX _I32_MAX
00146 #define INT64_MIN ((int64_t)_I64_MIN)
00147 #define INT64_MAX _I64_MAX
00148 #define UINT8_MAX _UI8_MAX
00149 #define UINT16_MAX _UI16_MAX
00150 #define UINT32_MAX _UI32_MAX
00151 #define UINT64_MAX _UI64_MAX
00152
00153
00154 #define INT_LEAST8_MIN INT8_MIN
00155 #define INT_LEAST8_MAX INT8_MAX
00156 #define INT_LEAST16_MIN INT16_MIN
00157 #define INT_LEAST16_MAX INT16_MAX
00158 #define INT_LEAST32_MIN INT32_MIN
00159 #define INT_LEAST32_MAX INT32_MAX
00160 #define INT_LEAST64_MIN INT64_MIN
00161 #define INT_LEAST64_MAX INT64_MAX
00162 #define UINT_LEAST8_MAX UINT8_MAX
00163 #define UINT_LEAST16_MAX UINT16_MAX
00164 #define UINT_LEAST32_MAX UINT32_MAX
00165 #define UINT_LEAST64_MAX UINT64_MAX
00166
00167
00168 #define INT_FAST8_MIN INT8_MIN
00169 #define INT_FAST8_MAX INT8_MAX
00170 #define INT_FAST16_MIN INT16_MIN
00171 #define INT_FAST16_MAX INT16_MAX
00172 #define INT_FAST32_MIN INT32_MIN
00173 #define INT_FAST32_MAX INT32_MAX
00174 #define INT_FAST64_MIN INT64_MIN
00175 #define INT_FAST64_MAX INT64_MAX
00176 #define UINT_FAST8_MAX UINT8_MAX
00177 #define UINT_FAST16_MAX UINT16_MAX
00178 #define UINT_FAST32_MAX UINT32_MAX
00179 #define UINT_FAST64_MAX UINT64_MAX
00180
00181
00182 #ifdef _WIN64 // [
00183 # define INTPTR_MIN INT64_MIN
00184 # define INTPTR_MAX INT64_MAX
00185 # define UINTPTR_MAX UINT64_MAX
00186 #else // _WIN64 ][
00187 # define INTPTR_MIN INT32_MIN
00188 # define INTPTR_MAX INT32_MAX
00189 # define UINTPTR_MAX UINT32_MAX
00190 #endif // _WIN64 ]
00191
00192
00193 #define INTMAX_MIN INT64_MIN
00194 #define INTMAX_MAX INT64_MAX
00195 #define UINTMAX_MAX UINT64_MAX
00196
00197
00198
00199 #ifdef _WIN64 // [
00200 # define PTRDIFF_MIN _I64_MIN
00201 # define PTRDIFF_MAX _I64_MAX
00202 #else // _WIN64 ][
00203 # define PTRDIFF_MIN _I32_MIN
00204 # define PTRDIFF_MAX _I32_MAX
00205 #endif // _WIN64 ]
00206
00207 #define SIG_ATOMIC_MIN INT_MIN
00208 #define SIG_ATOMIC_MAX INT_MAX
00209
00210 #ifndef SIZE_MAX // [
00211 # ifdef _WIN64 // [
00212 # define SIZE_MAX _UI64_MAX
00213 # else // _WIN64 ][
00214 # define SIZE_MAX _UI32_MAX
00215 # endif // _WIN64 ]
00216 #endif // SIZE_MAX ]
00217
00218
00219 #ifndef WCHAR_MIN // [
00220 # define WCHAR_MIN 0
00221 #endif // WCHAR_MIN ]
00222 #ifndef WCHAR_MAX // [
00223 # define WCHAR_MAX _UI16_MAX
00224 #endif // WCHAR_MAX ]
00225
00226 #define WINT_MIN 0
00227 #define WINT_MAX _UI16_MAX
00228
00229 #endif // __STDC_LIMIT_MACROS ]
00230
00231
00232
00233
00234 #if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [ See footnote 224 at page 260
00235
00236
00237
00238 #define INT8_C(val) val##i8
00239 #define INT16_C(val) val##i16
00240 #define INT32_C(val) val##i32
00241 #define INT64_C(val) val##i64
00242
00243 #define UINT8_C(val) val##ui8
00244 #define UINT16_C(val) val##ui16
00245 #define UINT32_C(val) val##ui32
00246 #define UINT64_C(val) val##ui64
00247
00248
00249 #define INTMAX_C INT64_C
00250 #define UINTMAX_C UINT64_C
00251
00252 #endif // __STDC_CONSTANT_MACROS ]
00253
00254
00255 #endif // _MSC_STDINT_H_ ]