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 #ifndef _MSC_STDINT_H_ // [
  37 #define _MSC_STDINT_H_
  38 
  39 #ifndef _STDINT
  40 # define _STDINT
  41 #endif
  42 
  43 #if _MSC_VER > 1000
  44 #pragma once
  45 #endif
  46 
  47 #include <limits.h>
  48 
  49 // For Visual Studio 6 in C++ mode wrap <wchar.h> include with 'extern "C++" {}'
  50 // or compiler give many errors like this:
  51 //   error C2733: second C linkage of overloaded function 'wmemchr' not allowed
  52 #if (_MSC_VER < 1300) && defined(__cplusplus)
  53    extern "C++" {
  54 #endif 
  55 #     include <wchar.h>
  56 #if (_MSC_VER < 1300) && defined(__cplusplus)
  57    }
  58 #endif
  59 
  60 // Define _W64 macros to mark types changing their size, like intptr_t.
  61 #ifndef _W64
  62 #  if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300
  63 #     define _W64 __w64
  64 #  else
  65 #     define _W64
  66 #  endif
  67 #endif
  68 
  69 
  70 // 7.18.1 Integer types
  71 
  72 // 7.18.1.1 Exact-width integer types
  73 #ifndef int8_t
  74 typedef __int8            int8_t;
  75 #endif
  76 #ifndef int16_t
  77 typedef __int16           int16_t;
  78 #endif
  79 #ifndef int32_t
  80 typedef __int32           int32_t;
  81 #endif
  82 #ifndef int64_t
  83 typedef __int64           int64_t;
  84 #endif
  85 #ifndef uint8_t
  86 typedef unsigned __int8   uint8_t;
  87 #endif
  88 #ifndef u_char
  89 typedef unsigned __int8   u_char;
  90 #endif
  91 typedef unsigned __int16  uint16_t;
  92 #ifndef uint32_t
  93 typedef unsigned __int32  uint32_t;
  94 #endif
  95 typedef unsigned __int64  uint64_t;
  96 
  97 // 7.18.1.2 Minimum-width integer types
  98 typedef int8_t    int_least8_t;
  99 typedef int16_t   int_least16_t;
 100 typedef int32_t   int_least32_t;
 101 typedef int64_t   int_least64_t;
 102 typedef uint8_t   uint_least8_t;
 103 typedef uint16_t  uint_least16_t;
 104 typedef uint32_t  uint_least32_t;
 105 typedef uint64_t  uint_least64_t;
 106 
 107 // 7.18.1.3 Fastest minimum-width integer types
 108 typedef int8_t    int_fast8_t;
 109 typedef int16_t   int_fast16_t;
 110 typedef int32_t   int_fast32_t;
 111 typedef int64_t   int_fast64_t;
 112 typedef uint8_t   uint_fast8_t;
 113 typedef uint16_t  uint_fast16_t;
 114 typedef uint32_t  uint_fast32_t;
 115 typedef uint32_t  u_int32_t;
 116 typedef uint64_t  uint_fast64_t;
 117 
 118 // 7.18.1.4 Integer types capable of holding object pointers
 119 #ifdef _WIN64 // [
 120    typedef __int64           intptr_t;
 121    typedef unsigned __int64  uintptr_t;
 122 #else // _WIN64 ][
 123    typedef _W64 int               intptr_t;
 124    typedef _W64 unsigned int      uintptr_t;
 125 #endif // _WIN64 ]
 126 
 127 // 7.18.1.5 Greatest-width integer types
 128 typedef int64_t   intmax_t;
 129 typedef uint64_t  uintmax_t;
 130 
 131 
 132 // 7.18.2 Limits of specified-width integer types
 133 
 134 #if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [   See footnote 220 at page 257 and footnote 221 at page 259
 135 
 136 // 7.18.2.1 Limits of exact-width integer types
 137 #define INT8_MIN     ((int8_t)_I8_MIN)
 138 #define INT8_MAX     _I8_MAX
 139 #define INT16_MIN    ((int16_t)_I16_MIN)
 140 #define INT16_MAX    _I16_MAX
 141 #define INT32_MIN    ((int32_t)_I32_MIN)
 142 #define INT32_MAX    _I32_MAX
 143 #define INT64_MIN    ((int64_t)_I64_MIN)
 144 #define INT64_MAX    _I64_MAX
 145 #define UINT8_MAX    _UI8_MAX
 146 #define UINT16_MAX   _UI16_MAX
 147 #define UINT32_MAX   _UI32_MAX
 148 #define UINT64_MAX   _UI64_MAX
 149 
 150 // 7.18.2.2 Limits of minimum-width integer types
 151 #define INT_LEAST8_MIN    INT8_MIN
 152 #define INT_LEAST8_MAX    INT8_MAX
 153 #define INT_LEAST16_MIN   INT16_MIN
 154 #define INT_LEAST16_MAX   INT16_MAX
 155 #define INT_LEAST32_MIN   INT32_MIN
 156 #define INT_LEAST32_MAX   INT32_MAX
 157 #define INT_LEAST64_MIN   INT64_MIN
 158 #define INT_LEAST64_MAX   INT64_MAX
 159 #define UINT_LEAST8_MAX   UINT8_MAX
 160 #define UINT_LEAST16_MAX  UINT16_MAX
 161 #define UINT_LEAST32_MAX  UINT32_MAX
 162 #define UINT_LEAST64_MAX  UINT64_MAX
 163 
 164 // 7.18.2.3 Limits of fastest minimum-width integer types
 165 #define INT_FAST8_MIN    INT8_MIN
 166 #define INT_FAST8_MAX    INT8_MAX
 167 #define INT_FAST16_MIN   INT16_MIN
 168 #define INT_FAST16_MAX   INT16_MAX
 169 #define INT_FAST32_MIN   INT32_MIN
 170 #define INT_FAST32_MAX   INT32_MAX
 171 #define INT_FAST64_MIN   INT64_MIN
 172 #define INT_FAST64_MAX   INT64_MAX
 173 #define UINT_FAST8_MAX   UINT8_MAX
 174 #define UINT_FAST16_MAX  UINT16_MAX
 175 #define UINT_FAST32_MAX  UINT32_MAX
 176 #define UINT_FAST64_MAX  UINT64_MAX
 177 
 178 // 7.18.2.4 Limits of integer types capable of holding object pointers
 179 #ifdef _WIN64 // [
 180 #  define INTPTR_MIN   INT64_MIN
 181 #  define INTPTR_MAX   INT64_MAX
 182 #  define UINTPTR_MAX  UINT64_MAX
 183 #else // _WIN64 ][
 184 #  define INTPTR_MIN   INT32_MIN
 185 #  define INTPTR_MAX   INT32_MAX
 186 #  define UINTPTR_MAX  UINT32_MAX
 187 #endif // _WIN64 ]
 188 
 189 // 7.18.2.5 Limits of greatest-width integer types
 190 #define INTMAX_MIN   INT64_MIN
 191 #define INTMAX_MAX   INT64_MAX
 192 #define UINTMAX_MAX  UINT64_MAX
 193 
 194 // 7.18.3 Limits of other integer types
 195 
 196 #ifdef _WIN64 // [
 197 #  define PTRDIFF_MIN  _I64_MIN
 198 #  define PTRDIFF_MAX  _I64_MAX
 199 #else  // _WIN64 ][
 200 #  define PTRDIFF_MIN  _I32_MIN
 201 #  define PTRDIFF_MAX  _I32_MAX
 202 #endif  // _WIN64 ]
 203 
 204 #define SIG_ATOMIC_MIN  INT_MIN
 205 #define SIG_ATOMIC_MAX  INT_MAX
 206 
 207 #ifndef SIZE_MAX // [
 208 #  ifdef _WIN64 // [
 209 #     define SIZE_MAX  _UI64_MAX
 210 #  else // _WIN64 ][
 211 #     define SIZE_MAX  _UI32_MAX
 212 #  endif // _WIN64 ]
 213 #endif // SIZE_MAX ]
 214 
 215 // WCHAR_MIN and WCHAR_MAX are also defined in <wchar.h>
 216 #ifndef WCHAR_MIN // [
 217 #  define WCHAR_MIN  0
 218 #endif  // WCHAR_MIN ]
 219 #ifndef WCHAR_MAX // [
 220 #  define WCHAR_MAX  _UI16_MAX
 221 #endif  // WCHAR_MAX ]
 222 
 223 #define WINT_MIN  0
 224 #define WINT_MAX  _UI16_MAX
 225 
 226 #endif // __STDC_LIMIT_MACROS ]
 227 
 228 
 229 // 7.18.4 Limits of other integer types
 230 
 231 #if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [   See footnote 224 at page 260
 232 
 233 // 7.18.4.1 Macros for minimum-width integer constants
 234 
 235 #define INT8_C(val)  val##i8
 236 #define INT16_C(val) val##i16
 237 #define INT32_C(val) val##i32
 238 #define INT64_C(val) val##i64
 239 
 240 #define UINT8_C(val)  val##ui8
 241 #define UINT16_C(val) val##ui16
 242 #define UINT32_C(val) val##ui32
 243 #define UINT64_C(val) val##ui64
 244 
 245 // 7.18.4.2 Macros for greatest-width integer constants
 246 #define INTMAX_C   INT64_C
 247 #define UINTMAX_C  UINT64_C
 248 
 249 #if _MSC_VER < 1600
 250 static __inline int64_t llabs(int64_t i)
 251 {
 252         return i >= 0 ? i: -i;
 253 }
 254 #endif
 255 
 256 #endif // __STDC_CONSTANT_MACROS ]
 257 
 258 
 259 #endif // _MSC_STDINT_H_ ]

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