/* ex: set ts=2 et: */ /* $Id$ */ /* stdint.h is included in the C99 standard, which Visual Studio will never support. */ /* Reference: http://www.opengroup.org/onlinepubs/009695399/basedefs/stdint.h.html */ #ifndef _STDINT_H #define _STDINT_H #define __need_wint_t #define __need_wchar_t #include #ifdef WIN32 /* 7.18.1.1 Exact-width integer types */ /* The typedef name int N _t designates a signed integer type with width N, no * padding bits, and a two's-complement representation. Thus, int8_t denotes a * signed integer type with a width of exactly 8 bits. */ typedef char int8_t; typedef short int16_t; typedef int int32_t; typedef __int64 int64_t; typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned int uint32_t; typedef unsigned __int64 uint64_t; /* 7.18.1.2 Minimum-width integer types */ /* The typedef name int_least N _t designates a signed integer type with a * width of at least N, such that no signed integer type with lesser size has * at least the specified width. Thus, int_least32_t denotes a signed integer * type with a width of at least 32 bits. */ typedef int int_least8_t; typedef int int_least16_t; typedef int int_least32_t; typedef __int64 int_least64_t; /* The typedef name uint_least N _t designates an unsigned integer type with a * width of at least N, such that no unsigned integer type with lesser size has * at least the specified width. Thus, uint_least16_t denotes an unsigned integer * type with a width of at least 16 bits. */ typedef int uint_least8_t; typedef int uint_least16_t; typedef int uint_least32_t; typedef unsigned __int64 uint_least64_t; /* The typedef name int_fast N _t designates the fastest signed integer type * with a width of at least N. The typedef name uint_fast N _t designates the * fastest unsigned integer type with a width of at least N. */ typedef int int_fast8_t; typedef int int_fast16_t; typedef int int_fast32_t; typedef __int64 int_fast64_t; typedef int uint_fast8_t; typedef int uint_fast16_t; typedef int uint_fast32_t; typedef unsigned __int64 uint_fast64_t; /* 7.18.1.4 Integer types capable of holding object pointers */ typedef int intptr_t; typedef unsigned uintptr_t; /* 7.18.1.5 Greatest-width integer types */ typedef __int64 intmax_t; typedef unsigned __int64 uintmax_t; /* 7.18.2 Limits of specified-width integer types */ #if !defined ( __cplusplus) || defined (__STDC_LIMIT_MACROS) /* 7.18.2.1 Limits of exact-width integer types */ #define INT8_MIN (-128) #define INT16_MIN (-32768) #define INT32_MIN (-2147483647 - 1) #define INT64_MIN (-9223372036854775807LL - 1) #define INT8_MAX 127 #define INT16_MAX 32767 #define INT32_MAX 2147483647 #define INT64_MAX 9223372036854775807LL #define UINT8_MAX 0xff /* 255U */ #define UINT16_MAX 0xffff /* 65535U */ #define UINT32_MAX 0xffffffff /* 4294967295U */ #define UINT64_MAX 0xffffffffffffffffULL /* 18446744073709551615ULL */ /* 7.18.2.2 Limits of minimum-width integer types */ #define INT_LEAST8_MIN INT8_MIN #define INT_LEAST16_MIN INT16_MIN #define INT_LEAST32_MIN INT32_MIN #define INT_LEAST64_MIN INT64_MIN #define INT_LEAST8_MAX INT8_MAX #define INT_LEAST16_MAX INT16_MAX #define INT_LEAST32_MAX INT32_MAX #define INT_LEAST64_MAX INT64_MAX #define UINT_LEAST8_MAX UINT8_MAX #define UINT_LEAST16_MAX UINT16_MAX #define UINT_LEAST32_MAX UINT32_MAX #define UINT_LEAST64_MAX UINT64_MAX /* 7.18.2.3 Limits of fastest minimum-width integer types */ #define INT_FAST8_MIN INT8_MIN #define INT_FAST16_MIN INT16_MIN #define INT_FAST32_MIN INT32_MIN #define INT_FAST64_MIN INT64_MIN #define INT_FAST8_MAX INT8_MAX #define INT_FAST16_MAX INT16_MAX #define INT_FAST32_MAX INT32_MAX #define INT_FAST64_MAX INT64_MAX #define UINT_FAST8_MAX UINT8_MAX #define UINT_FAST16_MAX UINT16_MAX #define UINT_FAST32_MAX UINT32_MAX #define UINT_FAST64_MAX UINT64_MAX /* 7.18.2.4 Limits of integer types capable of holding object pointers */ #define INTPTR_MIN INT32_MIN #define INTPTR_MAX INT32_MAX #define UINTPTR_MAX UINT32_MAX /* 7.18.2.5 Limits of greatest-width integer types */ #define INTMAX_MIN INT64_MIN #define INTMAX_MAX INT64_MAX #define UINTMAX_MAX UINT64_MAX /* 7.18.3 Limits of other integer types */ #define PTRDIFF_MIN INT32_MIN #define PTRDIFF_MAX INT32_MAX #define SIG_ATOMIC_MIN INT32_MIN #define SIG_ATOMIC_MAX INT32_MAX #undef SIZE_MAX #define SIZE_MAX UINT32_MAX #ifndef WCHAR_MIN /* also in wchar.h */ # define WCHAR_MIN 0 # define WCHAR_MAX ((wchar_t)-1) /* UINT16_MAX */ #endif #endif /* !defined ( __cplusplus) || defined __STDC_LIMIT_MACROS */ #else # error "wtf, no WIN32?!" #endif #endif /* _STDINT_H */