root/win32/php_stdint.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. llabs

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

/* [<][>][^][v][top][bottom][index][help] */