// -*- C++ -*- /*************************************************************************** * * cstdint - definition of integer types [tr.c99.cstdint] * * $Id$ * *************************************************************************** * * 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 _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