1e462795ff5d4c7359f9e8637c10544bb2de70107tturney// ISO C9x  compliant stdint.h for Microsoft Visual Studio
2e462795ff5d4c7359f9e8637c10544bb2de70107tturney// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124
3e462795ff5d4c7359f9e8637c10544bb2de70107tturney//
4e462795ff5d4c7359f9e8637c10544bb2de70107tturney//  Copyright (c) 2006-2013 Alexander Chemeris
5e462795ff5d4c7359f9e8637c10544bb2de70107tturney//
6e462795ff5d4c7359f9e8637c10544bb2de70107tturney// Redistribution and use in source and binary forms, with or without
7e462795ff5d4c7359f9e8637c10544bb2de70107tturney// modification, are permitted provided that the following conditions are met:
8e462795ff5d4c7359f9e8637c10544bb2de70107tturney//
9e462795ff5d4c7359f9e8637c10544bb2de70107tturney//   1. Redistributions of source code must retain the above copyright notice,
10e462795ff5d4c7359f9e8637c10544bb2de70107tturney//      this list of conditions and the following disclaimer.
11e462795ff5d4c7359f9e8637c10544bb2de70107tturney//
12e462795ff5d4c7359f9e8637c10544bb2de70107tturney//   2. Redistributions in binary form must reproduce the above copyright
13e462795ff5d4c7359f9e8637c10544bb2de70107tturney//      notice, this list of conditions and the following disclaimer in the
14e462795ff5d4c7359f9e8637c10544bb2de70107tturney//      documentation and/or other materials provided with the distribution.
15e462795ff5d4c7359f9e8637c10544bb2de70107tturney//
16e462795ff5d4c7359f9e8637c10544bb2de70107tturney//   3. Neither the name of the product nor the names of its contributors may
17e462795ff5d4c7359f9e8637c10544bb2de70107tturney//      be used to endorse or promote products derived from this software
18e462795ff5d4c7359f9e8637c10544bb2de70107tturney//      without specific prior written permission.
19e462795ff5d4c7359f9e8637c10544bb2de70107tturney//
20e462795ff5d4c7359f9e8637c10544bb2de70107tturney// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
21e462795ff5d4c7359f9e8637c10544bb2de70107tturney// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
22e462795ff5d4c7359f9e8637c10544bb2de70107tturney// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
23e462795ff5d4c7359f9e8637c10544bb2de70107tturney// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24e462795ff5d4c7359f9e8637c10544bb2de70107tturney// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25e462795ff5d4c7359f9e8637c10544bb2de70107tturney// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
26e462795ff5d4c7359f9e8637c10544bb2de70107tturney// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
27e462795ff5d4c7359f9e8637c10544bb2de70107tturney// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
28e462795ff5d4c7359f9e8637c10544bb2de70107tturney// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
29e462795ff5d4c7359f9e8637c10544bb2de70107tturney// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30e462795ff5d4c7359f9e8637c10544bb2de70107tturney//
31e462795ff5d4c7359f9e8637c10544bb2de70107tturney///////////////////////////////////////////////////////////////////////////////
32e462795ff5d4c7359f9e8637c10544bb2de70107tturney
33e462795ff5d4c7359f9e8637c10544bb2de70107tturney// The above software in this distribution may have been modified by
34e462795ff5d4c7359f9e8637c10544bb2de70107tturney// THL A29 Limited ("Tencent Modifications").
35e462795ff5d4c7359f9e8637c10544bb2de70107tturney// All Tencent Modifications are Copyright (C) 2015 THL A29 Limited.
36e462795ff5d4c7359f9e8637c10544bb2de70107tturney
37e462795ff5d4c7359f9e8637c10544bb2de70107tturney#ifndef _MSC_VER // [
38e462795ff5d4c7359f9e8637c10544bb2de70107tturney#error "Use this header only with Microsoft Visual C++ compilers!"
39e462795ff5d4c7359f9e8637c10544bb2de70107tturney#endif // _MSC_VER ]
40e462795ff5d4c7359f9e8637c10544bb2de70107tturney
41e462795ff5d4c7359f9e8637c10544bb2de70107tturney#ifndef _MSC_STDINT_H_ // [
42e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define _MSC_STDINT_H_
43e462795ff5d4c7359f9e8637c10544bb2de70107tturney
44e462795ff5d4c7359f9e8637c10544bb2de70107tturney#if _MSC_VER > 1000
45e462795ff5d4c7359f9e8637c10544bb2de70107tturney#pragma once
46e462795ff5d4c7359f9e8637c10544bb2de70107tturney#endif
47e462795ff5d4c7359f9e8637c10544bb2de70107tturney
48e462795ff5d4c7359f9e8637c10544bb2de70107tturney// miloyip: Originally Visual Studio 2010 uses its own stdint.h. However it generates warning with INT64_C(), so change to use this file for vs2010.
49e462795ff5d4c7359f9e8637c10544bb2de70107tturney#if _MSC_VER >= 1600 // [
50e462795ff5d4c7359f9e8637c10544bb2de70107tturney#include <stdint.h>
51e462795ff5d4c7359f9e8637c10544bb2de70107tturney
52e462795ff5d4c7359f9e8637c10544bb2de70107tturney#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [   See footnote 224 at page 260
53e462795ff5d4c7359f9e8637c10544bb2de70107tturney
54e462795ff5d4c7359f9e8637c10544bb2de70107tturney#undef INT8_C
55e462795ff5d4c7359f9e8637c10544bb2de70107tturney#undef INT16_C
56e462795ff5d4c7359f9e8637c10544bb2de70107tturney#undef INT32_C
57e462795ff5d4c7359f9e8637c10544bb2de70107tturney#undef INT64_C
58e462795ff5d4c7359f9e8637c10544bb2de70107tturney#undef UINT8_C
59e462795ff5d4c7359f9e8637c10544bb2de70107tturney#undef UINT16_C
60e462795ff5d4c7359f9e8637c10544bb2de70107tturney#undef UINT32_C
61e462795ff5d4c7359f9e8637c10544bb2de70107tturney#undef UINT64_C
62e462795ff5d4c7359f9e8637c10544bb2de70107tturney
63e462795ff5d4c7359f9e8637c10544bb2de70107tturney// 7.18.4.1 Macros for minimum-width integer constants
64e462795ff5d4c7359f9e8637c10544bb2de70107tturney
65e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define INT8_C(val)  val##i8
66e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define INT16_C(val) val##i16
67e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define INT32_C(val) val##i32
68e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define INT64_C(val) val##i64
69e462795ff5d4c7359f9e8637c10544bb2de70107tturney
70e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define UINT8_C(val)  val##ui8
71e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define UINT16_C(val) val##ui16
72e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define UINT32_C(val) val##ui32
73e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define UINT64_C(val) val##ui64
74e462795ff5d4c7359f9e8637c10544bb2de70107tturney
75e462795ff5d4c7359f9e8637c10544bb2de70107tturney// 7.18.4.2 Macros for greatest-width integer constants
76e462795ff5d4c7359f9e8637c10544bb2de70107tturney// These #ifndef's are needed to prevent collisions with <boost/cstdint.hpp>.
77e462795ff5d4c7359f9e8637c10544bb2de70107tturney// Check out Issue 9 for the details.
78e462795ff5d4c7359f9e8637c10544bb2de70107tturney#ifndef INTMAX_C //   [
79e462795ff5d4c7359f9e8637c10544bb2de70107tturney#  define INTMAX_C   INT64_C
80e462795ff5d4c7359f9e8637c10544bb2de70107tturney#endif // INTMAX_C    ]
81e462795ff5d4c7359f9e8637c10544bb2de70107tturney#ifndef UINTMAX_C //  [
82e462795ff5d4c7359f9e8637c10544bb2de70107tturney#  define UINTMAX_C  UINT64_C
83e462795ff5d4c7359f9e8637c10544bb2de70107tturney#endif // UINTMAX_C   ]
84e462795ff5d4c7359f9e8637c10544bb2de70107tturney
85e462795ff5d4c7359f9e8637c10544bb2de70107tturney#endif // __STDC_CONSTANT_MACROS ]
86e462795ff5d4c7359f9e8637c10544bb2de70107tturney
87e462795ff5d4c7359f9e8637c10544bb2de70107tturney#else // ] _MSC_VER >= 1700 [
88e462795ff5d4c7359f9e8637c10544bb2de70107tturney
89e462795ff5d4c7359f9e8637c10544bb2de70107tturney#include <limits.h>
90e462795ff5d4c7359f9e8637c10544bb2de70107tturney
91e462795ff5d4c7359f9e8637c10544bb2de70107tturney// For Visual Studio 6 in C++ mode and for many Visual Studio versions when
92e462795ff5d4c7359f9e8637c10544bb2de70107tturney// compiling for ARM we should wrap <wchar.h> include with 'extern "C++" {}'
93e462795ff5d4c7359f9e8637c10544bb2de70107tturney// or compiler give many errors like this:
94e462795ff5d4c7359f9e8637c10544bb2de70107tturney//   error C2733: second C linkage of overloaded function 'wmemchr' not allowed
95e462795ff5d4c7359f9e8637c10544bb2de70107tturney#ifdef __cplusplus
96e462795ff5d4c7359f9e8637c10544bb2de70107tturneyextern "C" {
97e462795ff5d4c7359f9e8637c10544bb2de70107tturney#endif
98e462795ff5d4c7359f9e8637c10544bb2de70107tturney#  include <wchar.h>
99e462795ff5d4c7359f9e8637c10544bb2de70107tturney#ifdef __cplusplus
100e462795ff5d4c7359f9e8637c10544bb2de70107tturney}
101e462795ff5d4c7359f9e8637c10544bb2de70107tturney#endif
102e462795ff5d4c7359f9e8637c10544bb2de70107tturney
103e462795ff5d4c7359f9e8637c10544bb2de70107tturney// Define _W64 macros to mark types changing their size, like intptr_t.
104e462795ff5d4c7359f9e8637c10544bb2de70107tturney#ifndef _W64
105e462795ff5d4c7359f9e8637c10544bb2de70107tturney#  if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300
106e462795ff5d4c7359f9e8637c10544bb2de70107tturney#     define _W64 __w64
107e462795ff5d4c7359f9e8637c10544bb2de70107tturney#  else
108e462795ff5d4c7359f9e8637c10544bb2de70107tturney#     define _W64
109e462795ff5d4c7359f9e8637c10544bb2de70107tturney#  endif
110e462795ff5d4c7359f9e8637c10544bb2de70107tturney#endif
111e462795ff5d4c7359f9e8637c10544bb2de70107tturney
112e462795ff5d4c7359f9e8637c10544bb2de70107tturney
113e462795ff5d4c7359f9e8637c10544bb2de70107tturney// 7.18.1 Integer types
114e462795ff5d4c7359f9e8637c10544bb2de70107tturney
115e462795ff5d4c7359f9e8637c10544bb2de70107tturney// 7.18.1.1 Exact-width integer types
116e462795ff5d4c7359f9e8637c10544bb2de70107tturney
117e462795ff5d4c7359f9e8637c10544bb2de70107tturney// Visual Studio 6 and Embedded Visual C++ 4 doesn't
118e462795ff5d4c7359f9e8637c10544bb2de70107tturney// realize that, e.g. char has the same size as __int8
119e462795ff5d4c7359f9e8637c10544bb2de70107tturney// so we give up on __intX for them.
120e462795ff5d4c7359f9e8637c10544bb2de70107tturney#if (_MSC_VER < 1300)
121e462795ff5d4c7359f9e8637c10544bb2de70107tturney   typedef signed char       int8_t;
122e462795ff5d4c7359f9e8637c10544bb2de70107tturney   typedef signed short      int16_t;
123e462795ff5d4c7359f9e8637c10544bb2de70107tturney   typedef signed int        int32_t;
124e462795ff5d4c7359f9e8637c10544bb2de70107tturney   typedef unsigned char     uint8_t;
125e462795ff5d4c7359f9e8637c10544bb2de70107tturney   typedef unsigned short    uint16_t;
126e462795ff5d4c7359f9e8637c10544bb2de70107tturney   typedef unsigned int      uint32_t;
127e462795ff5d4c7359f9e8637c10544bb2de70107tturney#else
128e462795ff5d4c7359f9e8637c10544bb2de70107tturney   typedef signed __int8     int8_t;
129e462795ff5d4c7359f9e8637c10544bb2de70107tturney   typedef signed __int16    int16_t;
130e462795ff5d4c7359f9e8637c10544bb2de70107tturney   typedef signed __int32    int32_t;
131e462795ff5d4c7359f9e8637c10544bb2de70107tturney   typedef unsigned __int8   uint8_t;
132e462795ff5d4c7359f9e8637c10544bb2de70107tturney   typedef unsigned __int16  uint16_t;
133e462795ff5d4c7359f9e8637c10544bb2de70107tturney   typedef unsigned __int32  uint32_t;
134e462795ff5d4c7359f9e8637c10544bb2de70107tturney#endif
135e462795ff5d4c7359f9e8637c10544bb2de70107tturneytypedef signed __int64       int64_t;
136e462795ff5d4c7359f9e8637c10544bb2de70107tturneytypedef unsigned __int64     uint64_t;
137e462795ff5d4c7359f9e8637c10544bb2de70107tturney
138e462795ff5d4c7359f9e8637c10544bb2de70107tturney
139e462795ff5d4c7359f9e8637c10544bb2de70107tturney// 7.18.1.2 Minimum-width integer types
140e462795ff5d4c7359f9e8637c10544bb2de70107tturneytypedef int8_t    int_least8_t;
141e462795ff5d4c7359f9e8637c10544bb2de70107tturneytypedef int16_t   int_least16_t;
142e462795ff5d4c7359f9e8637c10544bb2de70107tturneytypedef int32_t   int_least32_t;
143e462795ff5d4c7359f9e8637c10544bb2de70107tturneytypedef int64_t   int_least64_t;
144e462795ff5d4c7359f9e8637c10544bb2de70107tturneytypedef uint8_t   uint_least8_t;
145e462795ff5d4c7359f9e8637c10544bb2de70107tturneytypedef uint16_t  uint_least16_t;
146e462795ff5d4c7359f9e8637c10544bb2de70107tturneytypedef uint32_t  uint_least32_t;
147e462795ff5d4c7359f9e8637c10544bb2de70107tturneytypedef uint64_t  uint_least64_t;
148e462795ff5d4c7359f9e8637c10544bb2de70107tturney
149e462795ff5d4c7359f9e8637c10544bb2de70107tturney// 7.18.1.3 Fastest minimum-width integer types
150e462795ff5d4c7359f9e8637c10544bb2de70107tturneytypedef int8_t    int_fast8_t;
151e462795ff5d4c7359f9e8637c10544bb2de70107tturneytypedef int16_t   int_fast16_t;
152e462795ff5d4c7359f9e8637c10544bb2de70107tturneytypedef int32_t   int_fast32_t;
153e462795ff5d4c7359f9e8637c10544bb2de70107tturneytypedef int64_t   int_fast64_t;
154e462795ff5d4c7359f9e8637c10544bb2de70107tturneytypedef uint8_t   uint_fast8_t;
155e462795ff5d4c7359f9e8637c10544bb2de70107tturneytypedef uint16_t  uint_fast16_t;
156e462795ff5d4c7359f9e8637c10544bb2de70107tturneytypedef uint32_t  uint_fast32_t;
157e462795ff5d4c7359f9e8637c10544bb2de70107tturneytypedef uint64_t  uint_fast64_t;
158e462795ff5d4c7359f9e8637c10544bb2de70107tturney
159e462795ff5d4c7359f9e8637c10544bb2de70107tturney// 7.18.1.4 Integer types capable of holding object pointers
160e462795ff5d4c7359f9e8637c10544bb2de70107tturney#ifdef _WIN64 // [
161e462795ff5d4c7359f9e8637c10544bb2de70107tturney   typedef signed __int64    intptr_t;
162e462795ff5d4c7359f9e8637c10544bb2de70107tturney   typedef unsigned __int64  uintptr_t;
163e462795ff5d4c7359f9e8637c10544bb2de70107tturney#else // _WIN64 ][
164e462795ff5d4c7359f9e8637c10544bb2de70107tturney   typedef _W64 signed int   intptr_t;
165e462795ff5d4c7359f9e8637c10544bb2de70107tturney   typedef _W64 unsigned int uintptr_t;
166e462795ff5d4c7359f9e8637c10544bb2de70107tturney#endif // _WIN64 ]
167e462795ff5d4c7359f9e8637c10544bb2de70107tturney
168e462795ff5d4c7359f9e8637c10544bb2de70107tturney// 7.18.1.5 Greatest-width integer types
169e462795ff5d4c7359f9e8637c10544bb2de70107tturneytypedef int64_t   intmax_t;
170e462795ff5d4c7359f9e8637c10544bb2de70107tturneytypedef uint64_t  uintmax_t;
171e462795ff5d4c7359f9e8637c10544bb2de70107tturney
172e462795ff5d4c7359f9e8637c10544bb2de70107tturney
173e462795ff5d4c7359f9e8637c10544bb2de70107tturney// 7.18.2 Limits of specified-width integer types
174e462795ff5d4c7359f9e8637c10544bb2de70107tturney
175e462795ff5d4c7359f9e8637c10544bb2de70107tturney#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [   See footnote 220 at page 257 and footnote 221 at page 259
176e462795ff5d4c7359f9e8637c10544bb2de70107tturney
177e462795ff5d4c7359f9e8637c10544bb2de70107tturney// 7.18.2.1 Limits of exact-width integer types
178e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define INT8_MIN     ((int8_t)_I8_MIN)
179e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define INT8_MAX     _I8_MAX
180e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define INT16_MIN    ((int16_t)_I16_MIN)
181e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define INT16_MAX    _I16_MAX
182e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define INT32_MIN    ((int32_t)_I32_MIN)
183e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define INT32_MAX    _I32_MAX
184e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define INT64_MIN    ((int64_t)_I64_MIN)
185e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define INT64_MAX    _I64_MAX
186e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define UINT8_MAX    _UI8_MAX
187e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define UINT16_MAX   _UI16_MAX
188e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define UINT32_MAX   _UI32_MAX
189e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define UINT64_MAX   _UI64_MAX
190e462795ff5d4c7359f9e8637c10544bb2de70107tturney
191e462795ff5d4c7359f9e8637c10544bb2de70107tturney// 7.18.2.2 Limits of minimum-width integer types
192e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define INT_LEAST8_MIN    INT8_MIN
193e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define INT_LEAST8_MAX    INT8_MAX
194e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define INT_LEAST16_MIN   INT16_MIN
195e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define INT_LEAST16_MAX   INT16_MAX
196e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define INT_LEAST32_MIN   INT32_MIN
197e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define INT_LEAST32_MAX   INT32_MAX
198e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define INT_LEAST64_MIN   INT64_MIN
199e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define INT_LEAST64_MAX   INT64_MAX
200e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define UINT_LEAST8_MAX   UINT8_MAX
201e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define UINT_LEAST16_MAX  UINT16_MAX
202e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define UINT_LEAST32_MAX  UINT32_MAX
203e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define UINT_LEAST64_MAX  UINT64_MAX
204e462795ff5d4c7359f9e8637c10544bb2de70107tturney
205e462795ff5d4c7359f9e8637c10544bb2de70107tturney// 7.18.2.3 Limits of fastest minimum-width integer types
206e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define INT_FAST8_MIN    INT8_MIN
207e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define INT_FAST8_MAX    INT8_MAX
208e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define INT_FAST16_MIN   INT16_MIN
209e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define INT_FAST16_MAX   INT16_MAX
210e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define INT_FAST32_MIN   INT32_MIN
211e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define INT_FAST32_MAX   INT32_MAX
212e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define INT_FAST64_MIN   INT64_MIN
213e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define INT_FAST64_MAX   INT64_MAX
214e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define UINT_FAST8_MAX   UINT8_MAX
215e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define UINT_FAST16_MAX  UINT16_MAX
216e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define UINT_FAST32_MAX  UINT32_MAX
217e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define UINT_FAST64_MAX  UINT64_MAX
218e462795ff5d4c7359f9e8637c10544bb2de70107tturney
219e462795ff5d4c7359f9e8637c10544bb2de70107tturney// 7.18.2.4 Limits of integer types capable of holding object pointers
220e462795ff5d4c7359f9e8637c10544bb2de70107tturney#ifdef _WIN64 // [
221e462795ff5d4c7359f9e8637c10544bb2de70107tturney#  define INTPTR_MIN   INT64_MIN
222e462795ff5d4c7359f9e8637c10544bb2de70107tturney#  define INTPTR_MAX   INT64_MAX
223e462795ff5d4c7359f9e8637c10544bb2de70107tturney#  define UINTPTR_MAX  UINT64_MAX
224e462795ff5d4c7359f9e8637c10544bb2de70107tturney#else // _WIN64 ][
225e462795ff5d4c7359f9e8637c10544bb2de70107tturney#  define INTPTR_MIN   INT32_MIN
226e462795ff5d4c7359f9e8637c10544bb2de70107tturney#  define INTPTR_MAX   INT32_MAX
227e462795ff5d4c7359f9e8637c10544bb2de70107tturney#  define UINTPTR_MAX  UINT32_MAX
228e462795ff5d4c7359f9e8637c10544bb2de70107tturney#endif // _WIN64 ]
229e462795ff5d4c7359f9e8637c10544bb2de70107tturney
230e462795ff5d4c7359f9e8637c10544bb2de70107tturney// 7.18.2.5 Limits of greatest-width integer types
231e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define INTMAX_MIN   INT64_MIN
232e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define INTMAX_MAX   INT64_MAX
233e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define UINTMAX_MAX  UINT64_MAX
234e462795ff5d4c7359f9e8637c10544bb2de70107tturney
235e462795ff5d4c7359f9e8637c10544bb2de70107tturney// 7.18.3 Limits of other integer types
236e462795ff5d4c7359f9e8637c10544bb2de70107tturney
237e462795ff5d4c7359f9e8637c10544bb2de70107tturney#ifdef _WIN64 // [
238e462795ff5d4c7359f9e8637c10544bb2de70107tturney#  define PTRDIFF_MIN  _I64_MIN
239e462795ff5d4c7359f9e8637c10544bb2de70107tturney#  define PTRDIFF_MAX  _I64_MAX
240e462795ff5d4c7359f9e8637c10544bb2de70107tturney#else  // _WIN64 ][
241e462795ff5d4c7359f9e8637c10544bb2de70107tturney#  define PTRDIFF_MIN  _I32_MIN
242e462795ff5d4c7359f9e8637c10544bb2de70107tturney#  define PTRDIFF_MAX  _I32_MAX
243e462795ff5d4c7359f9e8637c10544bb2de70107tturney#endif  // _WIN64 ]
244e462795ff5d4c7359f9e8637c10544bb2de70107tturney
245e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define SIG_ATOMIC_MIN  INT_MIN
246e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define SIG_ATOMIC_MAX  INT_MAX
247e462795ff5d4c7359f9e8637c10544bb2de70107tturney
248e462795ff5d4c7359f9e8637c10544bb2de70107tturney#ifndef SIZE_MAX // [
249e462795ff5d4c7359f9e8637c10544bb2de70107tturney#  ifdef _WIN64 // [
250e462795ff5d4c7359f9e8637c10544bb2de70107tturney#     define SIZE_MAX  _UI64_MAX
251e462795ff5d4c7359f9e8637c10544bb2de70107tturney#  else // _WIN64 ][
252e462795ff5d4c7359f9e8637c10544bb2de70107tturney#     define SIZE_MAX  _UI32_MAX
253e462795ff5d4c7359f9e8637c10544bb2de70107tturney#  endif // _WIN64 ]
254e462795ff5d4c7359f9e8637c10544bb2de70107tturney#endif // SIZE_MAX ]
255e462795ff5d4c7359f9e8637c10544bb2de70107tturney
256e462795ff5d4c7359f9e8637c10544bb2de70107tturney// WCHAR_MIN and WCHAR_MAX are also defined in <wchar.h>
257e462795ff5d4c7359f9e8637c10544bb2de70107tturney#ifndef WCHAR_MIN // [
258e462795ff5d4c7359f9e8637c10544bb2de70107tturney#  define WCHAR_MIN  0
259e462795ff5d4c7359f9e8637c10544bb2de70107tturney#endif  // WCHAR_MIN ]
260e462795ff5d4c7359f9e8637c10544bb2de70107tturney#ifndef WCHAR_MAX // [
261e462795ff5d4c7359f9e8637c10544bb2de70107tturney#  define WCHAR_MAX  _UI16_MAX
262e462795ff5d4c7359f9e8637c10544bb2de70107tturney#endif  // WCHAR_MAX ]
263e462795ff5d4c7359f9e8637c10544bb2de70107tturney
264e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define WINT_MIN  0
265e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define WINT_MAX  _UI16_MAX
266e462795ff5d4c7359f9e8637c10544bb2de70107tturney
267e462795ff5d4c7359f9e8637c10544bb2de70107tturney#endif // __STDC_LIMIT_MACROS ]
268e462795ff5d4c7359f9e8637c10544bb2de70107tturney
269e462795ff5d4c7359f9e8637c10544bb2de70107tturney
270e462795ff5d4c7359f9e8637c10544bb2de70107tturney// 7.18.4 Limits of other integer types
271e462795ff5d4c7359f9e8637c10544bb2de70107tturney
272e462795ff5d4c7359f9e8637c10544bb2de70107tturney#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [   See footnote 224 at page 260
273e462795ff5d4c7359f9e8637c10544bb2de70107tturney
274e462795ff5d4c7359f9e8637c10544bb2de70107tturney// 7.18.4.1 Macros for minimum-width integer constants
275e462795ff5d4c7359f9e8637c10544bb2de70107tturney
276e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define INT8_C(val)  val##i8
277e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define INT16_C(val) val##i16
278e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define INT32_C(val) val##i32
279e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define INT64_C(val) val##i64
280e462795ff5d4c7359f9e8637c10544bb2de70107tturney
281e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define UINT8_C(val)  val##ui8
282e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define UINT16_C(val) val##ui16
283e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define UINT32_C(val) val##ui32
284e462795ff5d4c7359f9e8637c10544bb2de70107tturney#define UINT64_C(val) val##ui64
285e462795ff5d4c7359f9e8637c10544bb2de70107tturney
286e462795ff5d4c7359f9e8637c10544bb2de70107tturney// 7.18.4.2 Macros for greatest-width integer constants
287e462795ff5d4c7359f9e8637c10544bb2de70107tturney// These #ifndef's are needed to prevent collisions with <boost/cstdint.hpp>.
288e462795ff5d4c7359f9e8637c10544bb2de70107tturney// Check out Issue 9 for the details.
289e462795ff5d4c7359f9e8637c10544bb2de70107tturney#ifndef INTMAX_C //   [
290e462795ff5d4c7359f9e8637c10544bb2de70107tturney#  define INTMAX_C   INT64_C
291e462795ff5d4c7359f9e8637c10544bb2de70107tturney#endif // INTMAX_C    ]
292e462795ff5d4c7359f9e8637c10544bb2de70107tturney#ifndef UINTMAX_C //  [
293e462795ff5d4c7359f9e8637c10544bb2de70107tturney#  define UINTMAX_C  UINT64_C
294e462795ff5d4c7359f9e8637c10544bb2de70107tturney#endif // UINTMAX_C   ]
295e462795ff5d4c7359f9e8637c10544bb2de70107tturney
296e462795ff5d4c7359f9e8637c10544bb2de70107tturney#endif // __STDC_CONSTANT_MACROS ]
297e462795ff5d4c7359f9e8637c10544bb2de70107tturney
298e462795ff5d4c7359f9e8637c10544bb2de70107tturney#endif // _MSC_VER >= 1600 ]
299e462795ff5d4c7359f9e8637c10544bb2de70107tturney
300e462795ff5d4c7359f9e8637c10544bb2de70107tturney#endif // _MSC_STDINT_H_ ]
301