360 lines
11 KiB
C++
360 lines
11 KiB
C++
// -*- C++ -*-
|
|
/***************************************************************************
|
|
*
|
|
* cstdint - definition of integer types [tr.c99.cstdint]
|
|
*
|
|
* $Id: cstdint 590052 2007-10-30 12:44:14Z faridz $
|
|
*
|
|
***************************************************************************
|
|
*
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
* contributor license agreements. See the NOTICE file distributed
|
|
* with this work for additional information regarding copyright
|
|
* ownership. The ASF licenses this file to you under the Apache
|
|
* License, Version 2.0 (the "License"); you may not use this file
|
|
* except in compliance with the License. You may obtain a copy of
|
|
* the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
* implied. See the License for the specific language governing
|
|
* permissions and limitations under the License.
|
|
*
|
|
* Copyright 2006 Rogue Wave Software.
|
|
*
|
|
**************************************************************************/
|
|
|
|
#ifndef _RWSTD_TR1_CSTDINT_INCLUDED
|
|
#define _RWSTD_TR1_CSTDINT_INCLUDED
|
|
|
|
|
|
#include <rw/_defs.h>
|
|
|
|
|
|
_RWSTD_NAMESPACE (std) {
|
|
|
|
_RWSTD_NAMESPACE (tr1) {
|
|
|
|
#ifndef _RWSTD_BNO_TWOS_COMPLEMENT
|
|
# define _RWSTD_T_MIN(tmax) (-(tmax) - 1)
|
|
#else
|
|
# define _RWSTD_T_MIN(tmax) -(tmax)
|
|
#endif
|
|
|
|
|
|
/*** int8_t ***************************************************************/
|
|
|
|
#ifdef _RWSTD_INT8_T
|
|
|
|
// optional exact width types
|
|
typedef _RWSTD_INT8_T int8_t;
|
|
typedef _RWSTD_UINT8_T uint8_t;
|
|
|
|
# define INT8_MAX 127
|
|
# define UINT8_MAX 255U
|
|
# define INT_LEAST8_MAX INT8_MAX
|
|
# define UINT_LEAST8_MAX UINT8_MAX
|
|
# define INT_FAST8_MAX INT8_MAX
|
|
# define UINT_FAST8_MAX UINT8_MAX
|
|
|
|
#elif defined (_RWSTD_INT16_T)
|
|
|
|
# define INT_LEAST8_MAX 32767
|
|
# define UINT_LEAST8_MAX 65535U
|
|
# define INT_FAST8_MAX 32767
|
|
# define UINT_FAST8_MAX 65535U
|
|
|
|
#elif defined (_RWSTD_INT32_T)
|
|
|
|
# if 4 == _RWSTD_INT_SIZE
|
|
# define INT_LEAST8_MAX _RWSTD_INT_MAX
|
|
# define UINT_LEAST8_MAX _RWSTD_UINT_MAX
|
|
# define INT_FAST8_MAX _RWSTD_INT_MAX
|
|
# define UINT_FAST8_MAX _RWSTD_UINT_MAX
|
|
# elif 4 == _RWSTD_LONG_SIZE
|
|
# define INT_LEAST8_MAX _RWSTD_LONG_MAX
|
|
# define UINT_LEAST8_MAX _RWSTD_ULONG_MAX
|
|
# define INT_FAST8_MAX _RWSTD_LONG_MAX
|
|
# define UINT_FAST8_MAX _RWSTD_ULONG_MAX
|
|
# endif
|
|
|
|
#elif defined (_RWSTD_INT64_T)
|
|
|
|
# if 8 == _RWSTD_LONG_SIZE
|
|
# define INT_LEAST8_MAX _RWSTD_LONG_MAX
|
|
# define UINT_LEAST8_MAX _RWSTD_ULONG_MAX
|
|
# define INT_FAST8_MAX _RWSTD_LONG_MAX
|
|
# define UINT_FAST8_MAX _RWSTD_ULONG_MAX
|
|
# elif 8 == _RWSTD_LLONG_SIZE
|
|
# define INT_LEAST8_MAX _RWSTD_LLONG_MAX
|
|
# define UINT_LEAST8_MAX _RWSTD_ULLONG_MAX
|
|
# define INT_FAST8_MAX _RWSTD_LLONG_MAX
|
|
# define UINT_FAST8_MAX _RWSTD_ULLONG_MAX
|
|
# endif
|
|
|
|
#else // fallback on int
|
|
|
|
# define INT_LEAST8_MAX _RWSTD_INT_MAX
|
|
# define UINT_LEAST8_MAX _RWSTD_UINT_MAX
|
|
# define INT_FAST8_MAX _RWSTD_INT_MAX
|
|
# define UINT_FAST8_MAX _RWSTD_UINT_MAX
|
|
|
|
#endif // _RWSTD_INT{8,16,32,64}_T
|
|
|
|
|
|
/*** int16_t **************************************************************/
|
|
|
|
#ifdef _RWSTD_INT16_T
|
|
|
|
// optional exact width types
|
|
typedef _RWSTD_INT16_T int16_t;
|
|
typedef _RWSTD_UINT16_T uint16_t;
|
|
|
|
# define INT16_MAX 32767
|
|
# define UINT16_MAX 65535U
|
|
|
|
# define INT_LEAST16_MAX INT16_MAX
|
|
# define UINT_LEAST16_MAX UINT16_MAX
|
|
# define INT_FAST16_MAX INT16_MAX
|
|
# define UINT_FAST16_MAX UINT16_MAX
|
|
|
|
#elif defined (_RWSTD_INT32_T)
|
|
|
|
# if 4 == _RWSTD_INT_SIZE
|
|
# define INT_LEAST16_MAX _RWSTD_INT_MAX
|
|
# define UINT_LEAST16_MAX _RWSTD_UINT_MAX
|
|
# define INT_FAST16_MAX _RWSTD_INT_MAX
|
|
# define UINT_FAST16_MAX _RWSTD_UINT_MAX
|
|
# elif 4 == _RWSTD_LONG_SIZE
|
|
# define INT_LEAST16_MAX _RWSTD_LONG_MAX
|
|
# define UINT_LEAST16_MAX _RWSTD_ULONG_MAX
|
|
# define INT_FAST16_MAX _RWSTD_LONG_MAX
|
|
# define UINT_FAST16_MAX _RWSTD_ULONG_MAX
|
|
# endif
|
|
|
|
#elif defined (_RWSTD_INT64_T)
|
|
|
|
# if 8 == _RWSTD_LONG_SIZE
|
|
# define INT_LEAST16_MAX _RWSTD_LONG_MAX
|
|
# define UINT_LEAST16_MAX _RWSTD_ULONG_MAX
|
|
# define INT_FAST16_MAX _RWSTD_LONG_MAX
|
|
# define UINT_FAST16_MAX _RWSTD_ULONG_MAX
|
|
# elif 8 == _RWSTD_LLONG_SIZE
|
|
# define INT_LEAST16_MAX _RWSTD_LLONG_MAX
|
|
# define UINT_LEAST16_MAX _RWSTD_ULLONG_MAX
|
|
# define INT_FAST16_MAX _RWSTD_LLONG_MAX
|
|
# define UINT_FAST16_MAX _RWSTD_ULLONG_MAX
|
|
# endif
|
|
|
|
#else // fallback on int
|
|
|
|
# define INT_LEAST16_MAX _RWSTD_INT_MAX
|
|
# define UINT_LEAST16_MAX _RWSTD_UINT_MAX
|
|
# define INT_FAST16_MAX _RWSTD_INT_MAX
|
|
# define UINT_FAST16_MAX _RWSTD_UINT_MAX
|
|
|
|
#endif // _RWSTD_INT{16,32,64}_T
|
|
|
|
|
|
/*** int32_t **************************************************************/
|
|
|
|
#ifdef _RWSTD_INT32_T
|
|
|
|
// optional exact width types
|
|
typedef _RWSTD_INT32_T int32_t;
|
|
typedef _RWSTD_UINT32_T uint32_t;
|
|
|
|
# if 4 == _RWSTD_INT_SIZE
|
|
# define INT32_MAX _RWSTD_INT_MAX
|
|
# define UINT32_MAX _RWSTD_UINT_MAX
|
|
# elif 4 == _RWSTD_LONG_SIZE
|
|
# define INT32_MAX _RWSTD_LONG_MAX
|
|
# define UINT32_MAX _RWSTD_LONG_MAX
|
|
# endif
|
|
|
|
# define INT_LEAST32_MAX INT32_MAX
|
|
# define UINT_LEAST32_MAX UINT32_MAX
|
|
# define INT_FAST32_MAX INT32_MAX
|
|
# define UINT_FAST32_MAX UINT32_MAX
|
|
|
|
#elif defined (_RWSTD_INT64_T)
|
|
|
|
# if 8 == _RWSTD_LONG_SIZE
|
|
# define INT_LEAST32_MAX _RWSTD_LONG_MAX
|
|
# define UINT_LEAST32_MAX _RWSTD_ULONG_MAX
|
|
# define INT_FAST32_MAX _RWSTD_LONG_MAX
|
|
# define UINT_FAST32_MAX _RWSTD_ULONG_MAX
|
|
# elif 8 == _RWSTD_LLONG_SIZE
|
|
# define INT_LEAST32_MAX _RWSTD_LLONG_MAX
|
|
# define UINT_LEAST32_MAX _RWSTD_ULLONG_MAX
|
|
# define INT_FAST32_MAX _RWSTD_LLONG_MAX
|
|
# define UINT_FAST32_MAX _RWSTD_ULLONG_MAX
|
|
# endif
|
|
|
|
#else // fallback on int
|
|
|
|
# define INT32_MAX _RWSTD_INT_MAX
|
|
# define UINT32_MAX _RWSTD_UINT_MAX
|
|
# define INT_LEAST32_MAX _RWSTD_INT_MAX
|
|
# define UINT_LEAST32_MAX _RWSTD_UINT_MAX
|
|
# define INT_FAST32_MAX _RWSTD_INT_MAX
|
|
# define UINT_FAST32_MAX _RWSTD_UINT_MAX
|
|
|
|
#endif // _RWSTD_INT{32,64}_T
|
|
|
|
|
|
/*** int64_t **************************************************************/
|
|
|
|
#ifdef _RWSTD_INT64_T
|
|
|
|
// optional exact width types
|
|
typedef _RWSTD_INT64_T int64_t;
|
|
typedef _RWSTD_UINT64_T uint64_t;
|
|
|
|
// 7.18.2.5 of C99 requires that intmax_t be at least 64-bits wide
|
|
typedef _RWSTD_INT64_T intmax_t;
|
|
typedef _RWSTD_UINT64_T uintmax_t;
|
|
|
|
# if 8 == _RWSTD_LONG_SIZE
|
|
# define INT64_MAX _RWSTD_LONG_MAX
|
|
# define UINT64_MAX _RWSTD_ULONG_MAX
|
|
# elif 8 == _RWSTD_LLONG_SIZE
|
|
# define INT64_MAX _RWSTD_LLONG_MAX
|
|
# define UINT64_MAX _RWSTD_ULLONG_MAX
|
|
# endif
|
|
|
|
# define INT_LEAST64_MAX INT64_MAX
|
|
# define UINT_LEAST64_MAX UINT64_MAX
|
|
# define INT_FAST64_MAX INT64_MAX
|
|
# define UINT_FAST64_MAX UINT64_MAX
|
|
|
|
#elif defined (_RWSTD_LONG_LONG) // fallback on long long
|
|
|
|
// this possibly violates 7.18.2.5 of C99 which requires that intmax_t
|
|
// be at least 64-bits wide
|
|
typedef _RWSTD_LONG_LONG intmax_t;
|
|
typedef unsigned _RWSTD_LONG_LONG uintmax_t;
|
|
|
|
#else // fallback on long
|
|
|
|
// this likely violates 7.18.2.5 of C99 which requires that intmax_t
|
|
// be at least 64-bits wide
|
|
typedef long intmax_t;
|
|
typedef unsigned long uintmax_t;
|
|
|
|
#endif // _RWSTD_INT{64,32,16}_T
|
|
|
|
/*** intptr_t *************************************************************/
|
|
|
|
#if 8 == _RWSTD_PTR_SIZE
|
|
|
|
typedef _RWSTD_INT64_T intptr_t;
|
|
typedef _RWSTD_UINT64_T uintptr_t;
|
|
|
|
# define INTPTR_MAX INT64_MAX
|
|
# define UINTPTR_MAX UINT64_MAX
|
|
|
|
#elif 4 == _RWSTD_PTR_SIZE
|
|
|
|
typedef _RWSTD_INT32_T intptr_t;
|
|
typedef _RWSTD_UINT32_T uintptr_t;
|
|
|
|
# define INTPTR_MAX INT32_MAX
|
|
# define UINTPTR_MAX UINT32_MAX
|
|
|
|
#elif 2 == _RWSTD_PTR_SIZE
|
|
|
|
typedef _RWSTD_INT16_T intptr_t;
|
|
typedef _RWSTD_UINT16_T uintptr_t;
|
|
|
|
# define INTPTR_MAX INT16_MAX
|
|
# define UINTPTR_MAX UINT16_MAX
|
|
|
|
#else // fallback on long
|
|
|
|
typedef long intptr_t;
|
|
typedef unsigned long uintptr_t;
|
|
|
|
# define INTPTR_MAX _RWSTD_LONG_MAX
|
|
# define UINTPTR_MAX _RWSTD_LONG_MAX
|
|
|
|
#endif // {8,16,32,64} == _RWSTD_PTR_SIZE
|
|
|
|
/*** least and fast types *************************************************/
|
|
|
|
typedef _RWSTD_INT_LEAST8_T int_least8_t;
|
|
typedef _RWSTD_UINT_LEAST8_T uint_least8_t;
|
|
typedef _RWSTD_INT_LEAST8_T int_fast8_t;
|
|
typedef _RWSTD_UINT_LEAST8_T uint_fast8_t;
|
|
|
|
typedef _RWSTD_INT_LEAST16_T int_least16_t;
|
|
typedef _RWSTD_UINT_LEAST16_T uint_least16_t;
|
|
typedef _RWSTD_INT_LEAST16_T int_fast16_t;
|
|
typedef _RWSTD_UINT_LEAST16_T uint_fast16_t;
|
|
|
|
typedef _RWSTD_INT_LEAST32_T int_least32_t;
|
|
typedef _RWSTD_UINT_LEAST32_T uint_least32_t;
|
|
typedef _RWSTD_INT_LEAST32_T int_fast32_t;
|
|
typedef _RWSTD_UINT_LEAST32_T uint_fast32_t;
|
|
|
|
#ifdef _RWSTD_INT_LEAST64_T
|
|
|
|
typedef _RWSTD_INT_LEAST64_T int_least64_t;
|
|
typedef _RWSTD_UINT_LEAST64_T uint_least64_t;
|
|
typedef _RWSTD_INT_LEAST64_T int_fast64_t;
|
|
typedef _RWSTD_UINT_LEAST64_T uint_fast64_t;
|
|
|
|
#endif // _RWSTD_INT_LEAST64_T
|
|
|
|
#ifdef _RWSTD_INT_LEAST128_T
|
|
|
|
typedef _RWSTD_INT_LEAST128_T int_least128_t;
|
|
typedef _RWSTD_UINT_LEAST128_T uint_least128_t;
|
|
typedef _RWSTD_INT_LEAST128_T int_fast128_t;
|
|
typedef _RWSTD_UINT_LEAST128_T uint_fast128_t;
|
|
|
|
#endif // _RWSTD_INT_LEAST128_T
|
|
|
|
/*** other constants ******************************************************/
|
|
|
|
#define PTRDIFF_MIN _RWSTD_PTRDIFF_MIN
|
|
#define PTRDIFF_MAX _RWSTD_PTRDIFF_MAX
|
|
|
|
#define SIZE_MAX _RWSTD_SIZE_MAX
|
|
|
|
#define WCHAR_MIN _RWSTD_WCHAR_MIN
|
|
#define WCHAR_MAX _RWSTD_WCHAR_MAX
|
|
|
|
#define WINT_MIN _RWSTD_WINT_MIN
|
|
#define WINT_MAX _RWSTD_WINT_MAX
|
|
|
|
#define SIG_ATOMIC_MIN _RWSTD_SIG_ATOMIC_MIN
|
|
#define SIG_ATOMIC_MAX _RWSTD_SIG_ATOMIC_MAX
|
|
|
|
/*** computed _MIN constants **********************************************/
|
|
|
|
#define INT8_MIN _RWSTD_T_MIN (INT8_MAX)
|
|
#define INT16_MIN _RWSTD_T_MIN (INT16_MAX)
|
|
#define INT32_MIN _RWSTD_T_MIN (INT32_MAX)
|
|
#define INT64_MIN _RWSTD_T_MIN (INT64_MAX)
|
|
|
|
#define INT_LEAST8_MIN _RWSTD_T_MIN (INT_LEAST8_MAX)
|
|
#define INT_LEAST16_MIN _RWSTD_T_MIN (INT_LEAST16_MAX)
|
|
#define INT_LEAST32_MIN _RWSTD_T_MIN (INT_LEAST32_MAX)
|
|
#define INT_LEAST64_MIN _RWSTD_T_MIN (INT_LEAST64_MAX)
|
|
|
|
#define INT_FAST8_MIN _RWSTD_T_MIN (INT_FAST8_MAX)
|
|
#define INT_FAST16_MIN _RWSTD_T_MIN (INT_FAST16_MAX)
|
|
#define INT_FAST32_MIN _RWSTD_T_MIN (INT_FAST32_MAX)
|
|
#define INT_FAST64_MIN _RWSTD_T_MIN (INT_FAST64_MAX)
|
|
|
|
} // namespace tr1
|
|
|
|
} // namespace std
|
|
|
|
|
|
#endif // _RWSTD_TR1_CSTDINT_INCLUDED
|