msc/stdint.h

changeset 156
6a4bd1f4c57e
parent 155
45395ba5ed30
child 157
ae7cc5716f38
     1.1 --- a/msc/stdint.h	Mon Sep 09 10:48:08 2013 +0200
     1.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.3 @@ -1,247 +0,0 @@
     1.4 -// ISO C9x  compliant stdint.h for Microsoft Visual Studio
     1.5 -// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 
     1.6 -// 
     1.7 -//  Copyright (c) 2006-2008 Alexander Chemeris
     1.8 -// 
     1.9 -// Redistribution and use in source and binary forms, with or without
    1.10 -// modification, are permitted provided that the following conditions are met:
    1.11 -// 
    1.12 -//   1. Redistributions of source code must retain the above copyright notice,
    1.13 -//      this list of conditions and the following disclaimer.
    1.14 -// 
    1.15 -//   2. Redistributions in binary form must reproduce the above copyright
    1.16 -//      notice, this list of conditions and the following disclaimer in the
    1.17 -//      documentation and/or other materials provided with the distribution.
    1.18 -// 
    1.19 -//   3. The name of the author may be used to endorse or promote products
    1.20 -//      derived from this software without specific prior written permission.
    1.21 -// 
    1.22 -// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
    1.23 -// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    1.24 -// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
    1.25 -// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    1.26 -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
    1.27 -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
    1.28 -// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
    1.29 -// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
    1.30 -// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
    1.31 -// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    1.32 -// 
    1.33 -///////////////////////////////////////////////////////////////////////////////
    1.34 -
    1.35 -#ifndef _MSC_VER // [
    1.36 -#error "Use this header only with Microsoft Visual C++ compilers!"
    1.37 -#endif // _MSC_VER ]
    1.38 -
    1.39 -#ifndef _MSC_STDINT_H_ // [
    1.40 -#define _MSC_STDINT_H_
    1.41 -
    1.42 -#if _MSC_VER > 1000
    1.43 -#pragma once
    1.44 -#endif
    1.45 -
    1.46 -#include <limits.h>
    1.47 -
    1.48 -// For Visual Studio 6 in C++ mode and for many Visual Studio versions when
    1.49 -// compiling for ARM we should wrap <wchar.h> include with 'extern "C++" {}'
    1.50 -// or compiler give many errors like this:
    1.51 -//   error C2733: second C linkage of overloaded function 'wmemchr' not allowed
    1.52 -#ifdef __cplusplus
    1.53 -extern "C" {
    1.54 -#endif
    1.55 -#  include <wchar.h>
    1.56 -#ifdef __cplusplus
    1.57 -}
    1.58 -#endif
    1.59 -
    1.60 -// Define _W64 macros to mark types changing their size, like intptr_t.
    1.61 -#ifndef _W64
    1.62 -#  if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300
    1.63 -#     define _W64 __w64
    1.64 -#  else
    1.65 -#     define _W64
    1.66 -#  endif
    1.67 -#endif
    1.68 -
    1.69 -
    1.70 -// 7.18.1 Integer types
    1.71 -
    1.72 -// 7.18.1.1 Exact-width integer types
    1.73 -
    1.74 -// Visual Studio 6 and Embedded Visual C++ 4 doesn't
    1.75 -// realize that, e.g. char has the same size as __int8
    1.76 -// so we give up on __intX for them.
    1.77 -#if (_MSC_VER < 1300)
    1.78 -   typedef signed char       int8_t;
    1.79 -   typedef signed short      int16_t;
    1.80 -   typedef signed int        int32_t;
    1.81 -   typedef unsigned char     uint8_t;
    1.82 -   typedef unsigned short    uint16_t;
    1.83 -   typedef unsigned int      uint32_t;
    1.84 -#else
    1.85 -   typedef signed __int8     int8_t;
    1.86 -   typedef signed __int16    int16_t;
    1.87 -   typedef signed __int32    int32_t;
    1.88 -   typedef unsigned __int8   uint8_t;
    1.89 -   typedef unsigned __int16  uint16_t;
    1.90 -   typedef unsigned __int32  uint32_t;
    1.91 -#endif
    1.92 -typedef signed __int64       int64_t;
    1.93 -typedef unsigned __int64     uint64_t;
    1.94 -
    1.95 -
    1.96 -// 7.18.1.2 Minimum-width integer types
    1.97 -typedef int8_t    int_least8_t;
    1.98 -typedef int16_t   int_least16_t;
    1.99 -typedef int32_t   int_least32_t;
   1.100 -typedef int64_t   int_least64_t;
   1.101 -typedef uint8_t   uint_least8_t;
   1.102 -typedef uint16_t  uint_least16_t;
   1.103 -typedef uint32_t  uint_least32_t;
   1.104 -typedef uint64_t  uint_least64_t;
   1.105 -
   1.106 -// 7.18.1.3 Fastest minimum-width integer types
   1.107 -typedef int8_t    int_fast8_t;
   1.108 -typedef int16_t   int_fast16_t;
   1.109 -typedef int32_t   int_fast32_t;
   1.110 -typedef int64_t   int_fast64_t;
   1.111 -typedef uint8_t   uint_fast8_t;
   1.112 -typedef uint16_t  uint_fast16_t;
   1.113 -typedef uint32_t  uint_fast32_t;
   1.114 -typedef uint64_t  uint_fast64_t;
   1.115 -
   1.116 -// 7.18.1.4 Integer types capable of holding object pointers
   1.117 -#ifdef _WIN64 // [
   1.118 -   typedef signed __int64    intptr_t;
   1.119 -   typedef unsigned __int64  uintptr_t;
   1.120 -#else // _WIN64 ][
   1.121 -   typedef _W64 signed int   intptr_t;
   1.122 -   typedef _W64 unsigned int uintptr_t;
   1.123 -#endif // _WIN64 ]
   1.124 -
   1.125 -// 7.18.1.5 Greatest-width integer types
   1.126 -typedef int64_t   intmax_t;
   1.127 -typedef uint64_t  uintmax_t;
   1.128 -
   1.129 -
   1.130 -// 7.18.2 Limits of specified-width integer types
   1.131 -
   1.132 -#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [   See footnote 220 at page 257 and footnote 221 at page 259
   1.133 -
   1.134 -// 7.18.2.1 Limits of exact-width integer types
   1.135 -#define INT8_MIN     ((int8_t)_I8_MIN)
   1.136 -#define INT8_MAX     _I8_MAX
   1.137 -#define INT16_MIN    ((int16_t)_I16_MIN)
   1.138 -#define INT16_MAX    _I16_MAX
   1.139 -#define INT32_MIN    ((int32_t)_I32_MIN)
   1.140 -#define INT32_MAX    _I32_MAX
   1.141 -#define INT64_MIN    ((int64_t)_I64_MIN)
   1.142 -#define INT64_MAX    _I64_MAX
   1.143 -#define UINT8_MAX    _UI8_MAX
   1.144 -#define UINT16_MAX   _UI16_MAX
   1.145 -#define UINT32_MAX   _UI32_MAX
   1.146 -#define UINT64_MAX   _UI64_MAX
   1.147 -
   1.148 -// 7.18.2.2 Limits of minimum-width integer types
   1.149 -#define INT_LEAST8_MIN    INT8_MIN
   1.150 -#define INT_LEAST8_MAX    INT8_MAX
   1.151 -#define INT_LEAST16_MIN   INT16_MIN
   1.152 -#define INT_LEAST16_MAX   INT16_MAX
   1.153 -#define INT_LEAST32_MIN   INT32_MIN
   1.154 -#define INT_LEAST32_MAX   INT32_MAX
   1.155 -#define INT_LEAST64_MIN   INT64_MIN
   1.156 -#define INT_LEAST64_MAX   INT64_MAX
   1.157 -#define UINT_LEAST8_MAX   UINT8_MAX
   1.158 -#define UINT_LEAST16_MAX  UINT16_MAX
   1.159 -#define UINT_LEAST32_MAX  UINT32_MAX
   1.160 -#define UINT_LEAST64_MAX  UINT64_MAX
   1.161 -
   1.162 -// 7.18.2.3 Limits of fastest minimum-width integer types
   1.163 -#define INT_FAST8_MIN    INT8_MIN
   1.164 -#define INT_FAST8_MAX    INT8_MAX
   1.165 -#define INT_FAST16_MIN   INT16_MIN
   1.166 -#define INT_FAST16_MAX   INT16_MAX
   1.167 -#define INT_FAST32_MIN   INT32_MIN
   1.168 -#define INT_FAST32_MAX   INT32_MAX
   1.169 -#define INT_FAST64_MIN   INT64_MIN
   1.170 -#define INT_FAST64_MAX   INT64_MAX
   1.171 -#define UINT_FAST8_MAX   UINT8_MAX
   1.172 -#define UINT_FAST16_MAX  UINT16_MAX
   1.173 -#define UINT_FAST32_MAX  UINT32_MAX
   1.174 -#define UINT_FAST64_MAX  UINT64_MAX
   1.175 -
   1.176 -// 7.18.2.4 Limits of integer types capable of holding object pointers
   1.177 -#ifdef _WIN64 // [
   1.178 -#  define INTPTR_MIN   INT64_MIN
   1.179 -#  define INTPTR_MAX   INT64_MAX
   1.180 -#  define UINTPTR_MAX  UINT64_MAX
   1.181 -#else // _WIN64 ][
   1.182 -#  define INTPTR_MIN   INT32_MIN
   1.183 -#  define INTPTR_MAX   INT32_MAX
   1.184 -#  define UINTPTR_MAX  UINT32_MAX
   1.185 -#endif // _WIN64 ]
   1.186 -
   1.187 -// 7.18.2.5 Limits of greatest-width integer types
   1.188 -#define INTMAX_MIN   INT64_MIN
   1.189 -#define INTMAX_MAX   INT64_MAX
   1.190 -#define UINTMAX_MAX  UINT64_MAX
   1.191 -
   1.192 -// 7.18.3 Limits of other integer types
   1.193 -
   1.194 -#ifdef _WIN64 // [
   1.195 -#  define PTRDIFF_MIN  _I64_MIN
   1.196 -#  define PTRDIFF_MAX  _I64_MAX
   1.197 -#else  // _WIN64 ][
   1.198 -#  define PTRDIFF_MIN  _I32_MIN
   1.199 -#  define PTRDIFF_MAX  _I32_MAX
   1.200 -#endif  // _WIN64 ]
   1.201 -
   1.202 -#define SIG_ATOMIC_MIN  INT_MIN
   1.203 -#define SIG_ATOMIC_MAX  INT_MAX
   1.204 -
   1.205 -#ifndef SIZE_MAX // [
   1.206 -#  ifdef _WIN64 // [
   1.207 -#     define SIZE_MAX  _UI64_MAX
   1.208 -#  else // _WIN64 ][
   1.209 -#     define SIZE_MAX  _UI32_MAX
   1.210 -#  endif // _WIN64 ]
   1.211 -#endif // SIZE_MAX ]
   1.212 -
   1.213 -// WCHAR_MIN and WCHAR_MAX are also defined in <wchar.h>
   1.214 -#ifndef WCHAR_MIN // [
   1.215 -#  define WCHAR_MIN  0
   1.216 -#endif  // WCHAR_MIN ]
   1.217 -#ifndef WCHAR_MAX // [
   1.218 -#  define WCHAR_MAX  _UI16_MAX
   1.219 -#endif  // WCHAR_MAX ]
   1.220 -
   1.221 -#define WINT_MIN  0
   1.222 -#define WINT_MAX  _UI16_MAX
   1.223 -
   1.224 -#endif // __STDC_LIMIT_MACROS ]
   1.225 -
   1.226 -
   1.227 -// 7.18.4 Limits of other integer types
   1.228 -
   1.229 -#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [   See footnote 224 at page 260
   1.230 -
   1.231 -// 7.18.4.1 Macros for minimum-width integer constants
   1.232 -
   1.233 -#define INT8_C(val)  val##i8
   1.234 -#define INT16_C(val) val##i16
   1.235 -#define INT32_C(val) val##i32
   1.236 -#define INT64_C(val) val##i64
   1.237 -
   1.238 -#define UINT8_C(val)  val##ui8
   1.239 -#define UINT16_C(val) val##ui16
   1.240 -#define UINT32_C(val) val##ui32
   1.241 -#define UINT64_C(val) val##ui64
   1.242 -
   1.243 -// 7.18.4.2 Macros for greatest-width integer constants
   1.244 -#define INTMAX_C   INT64_C
   1.245 -#define UINTMAX_C  UINT64_C
   1.246 -
   1.247 -#endif // __STDC_CONSTANT_MACROS ]
   1.248 -
   1.249 -
   1.250 -#endif // _MSC_STDINT_H_ ]

mercurial