aboutsummaryrefslogtreecommitdiff
path: root/include/EASTL/numeric_limits.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/EASTL/numeric_limits.h')
-rw-r--r--include/EASTL/numeric_limits.h1819
1 files changed, 0 insertions, 1819 deletions
diff --git a/include/EASTL/numeric_limits.h b/include/EASTL/numeric_limits.h
deleted file mode 100644
index 0d7dc97..0000000
--- a/include/EASTL/numeric_limits.h
+++ /dev/null
@@ -1,1819 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////
-// Copyright (c) Electronic Arts Inc. All rights reserved.
-///////////////////////////////////////////////////////////////////////////////
-
-///////////////////////////////////////////////////////////////////////////////
-// We support eastl::numeric_limits for the following types. Sized types such
-// as int32_t are covered by these basic types, with the exception of int128_t.
-//
-// bool
-// char (distinct from signed and unsigned char)
-// unsigned char,
-// signed char,
-// wchar_t
-// char16_t (when char16_t is a distict type)
-// char32_t (when char32_t is a distinct type)
-// unsigned short,
-// signed short
-// unsigned int
-// signed int
-// unsigned long
-// signed long
-// signed long long
-// unsigned long long
-// uint128_t (when supported natively by the compiler)
-// int128_t (when supported natively by the compiler)
-// float
-// double
-// long double
-///////////////////////////////////////////////////////////////////////////////
-
-
-#ifndef EASTL_NUMERIC_LIMITS_H
-#define EASTL_NUMERIC_LIMITS_H
-
-
-#include <EASTL/internal/config.h>
-#include <EASTL/type_traits.h>
-#include <limits.h> // C limits.h header
-#include <float.h>
-#if defined(_CPPLIB_VER) // Dinkumware.
- #include <ymath.h>
-#endif
-
-#if defined(EA_PRAGMA_ONCE_SUPPORTED)
- #pragma once // Some compilers (e.g. VC++) benefit significantly from using this. We've measured 3-4% build speed improvements in apps as a result.
-#endif
-
-
-// Disable Warnings:
-// 4310 - cast truncates constant value
-// 4296 - expression is always false
-EA_DISABLE_VC_WARNING(4310 4296)
-
-// EASTL_CUSTOM_FLOAT_CONSTANTS_REQUIRED
-//
-// Defined as 0 or 1.
-// Indicates whether we need to define our own implementations of inf, nan, snan, denorm floating point constants.
-//
-#if !defined(EASTL_CUSTOM_FLOAT_CONSTANTS_REQUIRED)
- #if (defined(EA_COMPILER_GNUC) || defined(__clang__) && defined(__FLT_MIN__)) || defined(_CPPLIB_VER) // __FLT_MIN__ detects if it's really GCC/clang and not a mimic. _CPPLIB_VER (Dinkumware) covers VC++, and Microsoft platforms.
- #define EASTL_CUSTOM_FLOAT_CONSTANTS_REQUIRED 0
- #else
- #define EASTL_CUSTOM_FLOAT_CONSTANTS_REQUIRED 1
- #endif
-#endif
-
-
-///////////////////////////////////////////////////////////////////////////////
-// min/max workaround
-//
-// MSVC++ has #defines for min/max which collide with the min/max algorithm
-// declarations. The following may still not completely resolve some kinds of
-// problems with MSVC++ #defines, though it deals with most cases in production
-// game code.
-//
-#if EASTL_NOMINMAX
- #ifdef min
- #undef min
- #endif
- #ifdef max
- #undef max
- #endif
-#endif
-
-
-// EA_CONSTEXPR
-// EA_CONSTEXPR is defined in EABase 2.00.38 and later.
-#if !defined(EA_CONSTEXPR)
- #define EA_CONSTEXPR
-#endif
-
-// EA_CONSTEXPR_OR_CONST
-// EA_CONSTEXPR_OR_CONST is defined in EABase 2.00.39 and later.
-#if !defined(EA_CONSTEXPR_OR_CONST)
- #define EA_CONSTEXPR_OR_CONST const
-#endif
-
-
-///////////////////////////////////////////////////////////////////////////////
-// EASTL_LIMITS macros
-// These apply to integral types only.
-///////////////////////////////////////////////////////////////////////////////
-
-// true or false.
-#define EASTL_LIMITS_IS_SIGNED(T) ((T)(-1) < 0)
-
-// The min possible value of T.
-#define EASTL_LIMITS_MIN_S(T) ((T)((T)1 << EASTL_LIMITS_DIGITS_S(T)))
-#define EASTL_LIMITS_MIN_U(T) ((T)0)
-#define EASTL_LIMITS_MIN(T) ((EASTL_LIMITS_IS_SIGNED(T) ? EASTL_LIMITS_MIN_S(T) : EASTL_LIMITS_MIN_U(T)))
-
-// The max possible value of T.
-#define EASTL_LIMITS_MAX_S(T) ((T)(((((T)1 << (EASTL_LIMITS_DIGITS(T) - 1)) - 1) << 1) + 1))
-#define EASTL_LIMITS_MAX_U(T) ((T)~(T)0)
-#define EASTL_LIMITS_MAX(T) ((EASTL_LIMITS_IS_SIGNED(T) ? EASTL_LIMITS_MAX_S(T) : EASTL_LIMITS_MAX_U(T)))
-
-// The number of bits in the representation of T.
-#define EASTL_LIMITS_DIGITS_S(T) ((sizeof(T) * CHAR_BIT) - 1)
-#define EASTL_LIMITS_DIGITS_U(T) ((sizeof(T) * CHAR_BIT))
-#define EASTL_LIMITS_DIGITS(T) ((EASTL_LIMITS_IS_SIGNED(T) ? EASTL_LIMITS_DIGITS_S(T) : EASTL_LIMITS_DIGITS_U(T)))
-
-// The number of decimal digits that can be represented by T.
-#define EASTL_LIMITS_DIGITS10_S(T) ((EASTL_LIMITS_DIGITS_S(T) * 643L) / 2136) // (643 / 2136) ~= log10(2).
-#define EASTL_LIMITS_DIGITS10_U(T) ((EASTL_LIMITS_DIGITS_U(T) * 643L) / 2136)
-#define EASTL_LIMITS_DIGITS10(T) ((EASTL_LIMITS_IS_SIGNED(T) ? EASTL_LIMITS_DIGITS10_S(T) : EASTL_LIMITS_DIGITS10_U(T)))
-
-
-
-
-
-
-namespace eastl
-{
- // See C++11 18.3.2.5
- enum float_round_style
- {
- round_indeterminate = -1, /// Intermediate.
- round_toward_zero = 0, /// To zero.
- round_to_nearest = 1, /// To the nearest representable value.
- round_toward_infinity = 2, /// To infinity.
- round_toward_neg_infinity = 3 /// To negative infinity.
- };
-
- // See C++11 18.3.2.6
- enum float_denorm_style
- {
- denorm_indeterminate = -1, /// It cannot be determined whether or not the type allows denormalized values.
- denorm_absent = 0, /// The type does not allow denormalized values.
- denorm_present = 1 /// The type allows denormalized values.
- };
-
-
- namespace Internal
- {
- // Defines default values for numeric_limits, which can be overridden by class specializations.
- // See C++11 18.3.2.3
- struct numeric_limits_base
- {
- // true if the type has an explicit specialization defined in the template class; false if not.
- static EA_CONSTEXPR_OR_CONST bool is_specialized = false;
-
- // Integer types: the number of *bits* in the representation of T.
- // Floating types: the number of digits in the mantissa of T (same as FLT_MANT_DIG, DBL_MANT_DIG or LDBL_MANT_DIG).
- static EA_CONSTEXPR_OR_CONST int digits = 0;
-
- // The number of decimal digits that can be represented by T.
- // Equivalent to FLT_DIG, DBL_DIG or LDBL_DIG for floating types.
- static EA_CONSTEXPR_OR_CONST int digits10 = 0;
-
- // The number of decimal digits required to make sure that two distinct values of the type have distinct decimal representations.
- static EA_CONSTEXPR_OR_CONST int max_digits10 = 0;
-
- // True if the type is signed.
- static EA_CONSTEXPR_OR_CONST bool is_signed = false;
-
- // True if the type is integral.
- static EA_CONSTEXPR_OR_CONST bool is_integer = false;
-
- // True if the type uses an exact representation. All integral types are
- // exact, but other types can be exact as well.
- static EA_CONSTEXPR_OR_CONST bool is_exact = false;
-
- // Integer types: the base of the representation. Always 2 for integers.
- // Floating types: the base of the exponent representation. Always FLT_RADIX (typically 2) for float.
- static EA_CONSTEXPR_OR_CONST int radix = 0;
-
- // The minimum integral radix-based exponent representable by the type.
- static EA_CONSTEXPR_OR_CONST int min_exponent = 0;
-
- // The minimum integral base 10 exponent representable by the type.
- static EA_CONSTEXPR_OR_CONST int min_exponent10 = 0;
-
- // The maximum integral radix-based exponent representable by the type.
- static EA_CONSTEXPR_OR_CONST int max_exponent = 0;
-
- // The maximum integral base 10 exponent representable by the type.
- static EA_CONSTEXPR_OR_CONST int max_exponent10 = 0;
-
- // True if the type has a representation for positive infinity.
- static EA_CONSTEXPR_OR_CONST bool has_infinity = false;
-
- // True if the type has a representation for a quiet (non-signaling) NaN.
- static EA_CONSTEXPR_OR_CONST bool has_quiet_NaN = false;
-
- // True if the type has a representation for a signaling NaN.
- static EA_CONSTEXPR_OR_CONST bool has_signaling_NaN = false;
-
- // An enumeration which identifies denormalization behavior.
- // In practice the application can change this at runtime via hardware-specific commands.
- static EA_CONSTEXPR_OR_CONST float_denorm_style has_denorm = denorm_absent;
-
- // True if the loss of accuracy is detected as a denormalization loss.
- // Typically false for integer types and true for floating point types.
- static EA_CONSTEXPR_OR_CONST bool has_denorm_loss = false;
-
- // True if the type has a bounded set of representable values. Typically true for
- // all built-in numerial types (integer and floating point).
- static EA_CONSTEXPR_OR_CONST bool is_bounded = false;
-
- // True if the type has a modulo representation (if it's possible to add two
- // positive numbers and have a result that wraps around to a third number
- // that is less. Typically true for integers and false for floating types.
- static EA_CONSTEXPR_OR_CONST bool is_modulo = false;
-
- // True if trapping (arithmetic exception generation) is implemented for this type.
- // Typically true for integer types (div by zero) and false for floating point types,
- // though in practice the application may be able to change floating point to trap at runtime.
- static EA_CONSTEXPR_OR_CONST bool traps = false;
-
- // True if tiny-ness is detected before rounding.
- static EA_CONSTEXPR_OR_CONST bool tinyness_before = false;
-
- // An enumeration which identifies default rounding behavior.
- // In practice the application can change this at runtime via hardware-specific commands.
- static EA_CONSTEXPR_OR_CONST float_round_style round_style = round_toward_zero;
-
- // True if the type is floating point and follows the IEC 559 standard (IEEE 754).
- // In practice the application or OS can change this at runtime via hardware-specific commands or via compiler optimizations.
- static EA_CONSTEXPR_OR_CONST bool is_iec559 = false;
- };
-
-
- #if EASTL_CUSTOM_FLOAT_CONSTANTS_REQUIRED
- extern EASTL_API float gFloatInfinity;
- extern EASTL_API float gFloatNaN;
- extern EASTL_API float gFloatSNaN;
- extern EASTL_API float gFloatDenorm;
-
- extern EASTL_API double gDoubleInfinity;
- extern EASTL_API double gDoubleNaN;
- extern EASTL_API double gDoubleSNaN;
- extern EASTL_API double gDoubleDenorm;
-
- extern EASTL_API long double gLongDoubleInfinity;
- extern EASTL_API long double gLongDoubleNaN;
- extern EASTL_API long double gLongDoubleSNaN;
- extern EASTL_API long double gLongDoubleDenorm;
- #endif
-
- } // namespace Internal
-
-
- // Default numeric_limits.
- // See C++11 18.3.2.3
- template<typename T>
- class numeric_limits : public Internal::numeric_limits_base
- {
- public:
- typedef T value_type;
-
- static value_type min()
- { return value_type(0); }
-
- static value_type max()
- { return value_type(0); }
-
- static value_type lowest()
- { return min(); }
-
- static value_type epsilon()
- { return value_type(0); }
-
- static value_type round_error()
- { return value_type(0); }
-
- static value_type denorm_min()
- { return value_type(0); }
-
- static value_type infinity()
- { return value_type(0); }
-
- static value_type quiet_NaN()
- { return value_type(0); }
-
- static value_type signaling_NaN()
- { return value_type(0); }
- };
-
-
- // Const/volatile variations of numeric_limits.
- template<typename T>
- class numeric_limits<const T> : public numeric_limits<T>
- {
- };
-
- template<typename T>
- class numeric_limits<volatile T> : public numeric_limits<T>
- {
- };
-
- template<typename T>
- class numeric_limits<const volatile T> : public numeric_limits<T>
- {
- };
-
-
-
- // numeric_limits<bool>
- template<>
- struct numeric_limits<bool>
- {
- typedef bool value_type;
-
- static EA_CONSTEXPR_OR_CONST bool is_specialized = true;
- static EA_CONSTEXPR_OR_CONST int digits = 1; // In practice bool is stores as a byte, or sometimes an int.
- static EA_CONSTEXPR_OR_CONST int digits10 = 0;
- static EA_CONSTEXPR_OR_CONST int max_digits10 = 0;
- static EA_CONSTEXPR_OR_CONST bool is_signed = false; // In practice bool may be implemented as signed char.
- static EA_CONSTEXPR_OR_CONST bool is_integer = true;
- static EA_CONSTEXPR_OR_CONST bool is_exact = true;
- static EA_CONSTEXPR_OR_CONST int radix = 2;
- static EA_CONSTEXPR_OR_CONST int min_exponent = 0;
- static EA_CONSTEXPR_OR_CONST int min_exponent10 = 0;
- static EA_CONSTEXPR_OR_CONST int max_exponent = 0;
- static EA_CONSTEXPR_OR_CONST int max_exponent10 = 0;
- static EA_CONSTEXPR_OR_CONST bool is_bounded = true;
- static EA_CONSTEXPR_OR_CONST bool is_modulo = false;
- static EA_CONSTEXPR_OR_CONST bool traps = true; // Should this be true or false? Given that it's implemented in hardware as an integer type, we use true.
- static EA_CONSTEXPR_OR_CONST bool tinyness_before = false;
- static EA_CONSTEXPR_OR_CONST float_round_style round_style = round_toward_zero;
- static EA_CONSTEXPR_OR_CONST bool has_infinity = false;
- static EA_CONSTEXPR_OR_CONST bool has_quiet_NaN = false;
- static EA_CONSTEXPR_OR_CONST bool has_signaling_NaN = false;
- static EA_CONSTEXPR_OR_CONST float_denorm_style has_denorm = denorm_absent;
- static EA_CONSTEXPR_OR_CONST bool has_denorm_loss = false;
- static EA_CONSTEXPR_OR_CONST bool is_iec559 = false;
-
- static EA_CONSTEXPR value_type min()
- { return false; }
-
- static EA_CONSTEXPR value_type max()
- { return true; }
-
- static EA_CONSTEXPR value_type lowest()
- { return false; }
-
- static EA_CONSTEXPR value_type epsilon()
- { return false; }
-
- static EA_CONSTEXPR value_type round_error()
- { return false; }
-
- static EA_CONSTEXPR value_type infinity()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type quiet_NaN()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type signaling_NaN()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type denorm_min()
- { return value_type(); }
- };
-
-
- // numeric_limits<char>
- template<>
- struct numeric_limits<char>
- {
- typedef char value_type;
-
- static EA_CONSTEXPR_OR_CONST bool is_specialized = true;
- static EA_CONSTEXPR_OR_CONST int digits = EASTL_LIMITS_DIGITS(value_type);
- static EA_CONSTEXPR_OR_CONST int digits10 = EASTL_LIMITS_DIGITS10(value_type);
- static EA_CONSTEXPR_OR_CONST int max_digits10 = 0;
- static EA_CONSTEXPR_OR_CONST bool is_signed = EASTL_LIMITS_IS_SIGNED(value_type);
- static EA_CONSTEXPR_OR_CONST bool is_integer = true;
- static EA_CONSTEXPR_OR_CONST bool is_exact = true;
- static EA_CONSTEXPR_OR_CONST int radix = 2;
- static EA_CONSTEXPR_OR_CONST int min_exponent = 0;
- static EA_CONSTEXPR_OR_CONST int min_exponent10 = 0;
- static EA_CONSTEXPR_OR_CONST int max_exponent = 0;
- static EA_CONSTEXPR_OR_CONST int max_exponent10 = 0;
- static EA_CONSTEXPR_OR_CONST bool is_bounded = true;
- static EA_CONSTEXPR_OR_CONST bool is_modulo = true;
- static EA_CONSTEXPR_OR_CONST bool traps = true;
- static EA_CONSTEXPR_OR_CONST bool tinyness_before = false;
- static EA_CONSTEXPR_OR_CONST float_round_style round_style = round_toward_zero;
- static EA_CONSTEXPR_OR_CONST bool has_infinity = false;
- static EA_CONSTEXPR_OR_CONST bool has_quiet_NaN = false;
- static EA_CONSTEXPR_OR_CONST bool has_signaling_NaN = false;
- static EA_CONSTEXPR_OR_CONST float_denorm_style has_denorm = denorm_absent;
- static EA_CONSTEXPR_OR_CONST bool has_denorm_loss = false;
- static EA_CONSTEXPR_OR_CONST bool is_iec559 = false;
-
- static EA_CONSTEXPR value_type min()
- { return EASTL_LIMITS_MIN(value_type); }
-
- static EA_CONSTEXPR value_type max()
- { return EASTL_LIMITS_MAX(value_type); }
-
- static EA_CONSTEXPR value_type lowest()
- { return EASTL_LIMITS_MIN(value_type); }
-
- static EA_CONSTEXPR value_type epsilon()
- { return 0; }
-
- static EA_CONSTEXPR value_type round_error()
- { return 0; }
-
- static EA_CONSTEXPR value_type infinity()
- { return value_type(); } // Question: Should we return 0 here or value_type()?
-
- static EA_CONSTEXPR value_type quiet_NaN()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type signaling_NaN()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type denorm_min()
- { return (value_type)0; }
- };
-
-
- // numeric_limits<unsigned char>
- template<>
- struct numeric_limits<unsigned char>
- {
- typedef unsigned char value_type;
-
- static EA_CONSTEXPR_OR_CONST bool is_specialized = true;
- static EA_CONSTEXPR_OR_CONST int digits = EASTL_LIMITS_DIGITS_U(value_type);
- static EA_CONSTEXPR_OR_CONST int digits10 = EASTL_LIMITS_DIGITS10_U(value_type);
- static EA_CONSTEXPR_OR_CONST int max_digits10 = 0;
- static EA_CONSTEXPR_OR_CONST bool is_signed = false;
- static EA_CONSTEXPR_OR_CONST bool is_integer = true;
- static EA_CONSTEXPR_OR_CONST bool is_exact = true;
- static EA_CONSTEXPR_OR_CONST int radix = 2;
- static EA_CONSTEXPR_OR_CONST int min_exponent = 0;
- static EA_CONSTEXPR_OR_CONST int min_exponent10 = 0;
- static EA_CONSTEXPR_OR_CONST int max_exponent = 0;
- static EA_CONSTEXPR_OR_CONST int max_exponent10 = 0;
- static EA_CONSTEXPR_OR_CONST bool is_bounded = true;
- static EA_CONSTEXPR_OR_CONST bool is_modulo = true;
- static EA_CONSTEXPR_OR_CONST bool traps = true;
- static EA_CONSTEXPR_OR_CONST bool tinyness_before = false;
- static EA_CONSTEXPR_OR_CONST float_round_style round_style = round_toward_zero;
- static EA_CONSTEXPR_OR_CONST bool has_infinity = false;
- static EA_CONSTEXPR_OR_CONST bool has_quiet_NaN = false;
- static EA_CONSTEXPR_OR_CONST bool has_signaling_NaN = false;
- static EA_CONSTEXPR_OR_CONST float_denorm_style has_denorm = denorm_absent;
- static EA_CONSTEXPR_OR_CONST bool has_denorm_loss = false;
- static EA_CONSTEXPR_OR_CONST bool is_iec559 = false;
-
- static EA_CONSTEXPR value_type min()
- { return 0; }
-
- static EA_CONSTEXPR value_type max()
- { return EASTL_LIMITS_MAX_U(value_type); }
-
- static EA_CONSTEXPR value_type lowest()
- { return 0; }
-
- static EA_CONSTEXPR value_type epsilon()
- { return 0; }
-
- static EA_CONSTEXPR value_type round_error()
- { return 0; }
-
- static EA_CONSTEXPR value_type infinity()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type quiet_NaN()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type signaling_NaN()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type denorm_min()
- { return (value_type)0; }
- };
-
-
- // numeric_limits<signed char>
- template<>
- struct numeric_limits<signed char>
- {
- typedef signed char value_type;
-
- static EA_CONSTEXPR_OR_CONST bool is_specialized = true;
- static EA_CONSTEXPR_OR_CONST int digits = EASTL_LIMITS_DIGITS_S(value_type);
- static EA_CONSTEXPR_OR_CONST int digits10 = EASTL_LIMITS_DIGITS10_S(value_type);
- static EA_CONSTEXPR_OR_CONST int max_digits10 = 0;
- static EA_CONSTEXPR_OR_CONST bool is_signed = true;
- static EA_CONSTEXPR_OR_CONST bool is_integer = true;
- static EA_CONSTEXPR_OR_CONST bool is_exact = true;
- static EA_CONSTEXPR_OR_CONST int radix = 2;
- static EA_CONSTEXPR_OR_CONST int min_exponent = 0;
- static EA_CONSTEXPR_OR_CONST int min_exponent10 = 0;
- static EA_CONSTEXPR_OR_CONST int max_exponent = 0;
- static EA_CONSTEXPR_OR_CONST int max_exponent10 = 0;
- static EA_CONSTEXPR_OR_CONST bool is_bounded = true;
- static EA_CONSTEXPR_OR_CONST bool is_modulo = true;
- static EA_CONSTEXPR_OR_CONST bool traps = true;
- static EA_CONSTEXPR_OR_CONST bool tinyness_before = false;
- static EA_CONSTEXPR_OR_CONST float_round_style round_style = round_toward_zero;
- static EA_CONSTEXPR_OR_CONST bool has_infinity = false;
- static EA_CONSTEXPR_OR_CONST bool has_quiet_NaN = false;
- static EA_CONSTEXPR_OR_CONST bool has_signaling_NaN = false;
- static EA_CONSTEXPR_OR_CONST float_denorm_style has_denorm = denorm_absent;
- static EA_CONSTEXPR_OR_CONST bool has_denorm_loss = false;
- static EA_CONSTEXPR_OR_CONST bool is_iec559 = false;
-
- static EA_CONSTEXPR value_type min()
- { return EASTL_LIMITS_MIN_S(value_type); }
-
- static EA_CONSTEXPR value_type max()
- { return EASTL_LIMITS_MAX_S(value_type); }
-
- static EA_CONSTEXPR value_type lowest()
- { return EASTL_LIMITS_MIN_S(value_type); }
-
- static EA_CONSTEXPR value_type epsilon()
- { return 0; }
-
- static EA_CONSTEXPR value_type round_error()
- { return 0; }
-
- static EA_CONSTEXPR value_type infinity()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type quiet_NaN()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type signaling_NaN()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type denorm_min()
- { return (value_type)0; }
- };
-
-
- // numeric_limits<wchar_t>
- // VC++ has the option of making wchar_t simply be unsigned short. If that's enabled then
- // the code below could possibly cause compile failures due to redundancy. The best resolution
- // may be to use __wchar_t here for VC++ instead of wchar_t, as __wchar_t is always a true
- // unique type under VC++. http://social.msdn.microsoft.com/Forums/en-US/vclanguage/thread/9059330a-7cce-4d0d-a8e0-e1dcb63322bd/
- template<>
- struct numeric_limits<wchar_t>
- {
- typedef wchar_t value_type;
-
- static EA_CONSTEXPR_OR_CONST bool is_specialized = true;
- static EA_CONSTEXPR_OR_CONST int digits = EASTL_LIMITS_DIGITS(value_type);
- static EA_CONSTEXPR_OR_CONST int digits10 = EASTL_LIMITS_DIGITS10(value_type);
- static EA_CONSTEXPR_OR_CONST int max_digits10 = 0;
- static EA_CONSTEXPR_OR_CONST bool is_signed = EASTL_LIMITS_IS_SIGNED(value_type);
- static EA_CONSTEXPR_OR_CONST bool is_integer = true;
- static EA_CONSTEXPR_OR_CONST bool is_exact = true;
- static EA_CONSTEXPR_OR_CONST int radix = 2;
- static EA_CONSTEXPR_OR_CONST int min_exponent = 0;
- static EA_CONSTEXPR_OR_CONST int min_exponent10 = 0;
- static EA_CONSTEXPR_OR_CONST int max_exponent = 0;
- static EA_CONSTEXPR_OR_CONST int max_exponent10 = 0;
- static EA_CONSTEXPR_OR_CONST bool is_bounded = true;
- static EA_CONSTEXPR_OR_CONST bool is_modulo = true;
- static EA_CONSTEXPR_OR_CONST bool traps = true;
- static EA_CONSTEXPR_OR_CONST bool tinyness_before = false;
- static EA_CONSTEXPR_OR_CONST float_round_style round_style = round_toward_zero;
- static EA_CONSTEXPR_OR_CONST bool has_infinity = false;
- static EA_CONSTEXPR_OR_CONST bool has_quiet_NaN = false;
- static EA_CONSTEXPR_OR_CONST bool has_signaling_NaN = false;
- static EA_CONSTEXPR_OR_CONST float_denorm_style has_denorm = denorm_absent;
- static EA_CONSTEXPR_OR_CONST bool has_denorm_loss = false;
- static EA_CONSTEXPR_OR_CONST bool is_iec559 = false;
-
- static EA_CONSTEXPR value_type min()
- { return EASTL_LIMITS_MIN(value_type); }
-
- static EA_CONSTEXPR value_type max()
- { return EASTL_LIMITS_MAX(value_type); }
-
- static EA_CONSTEXPR value_type lowest()
- { return EASTL_LIMITS_MIN(value_type); }
-
- static EA_CONSTEXPR value_type epsilon()
- { return 0; }
-
- static EA_CONSTEXPR value_type round_error()
- { return 0; }
-
- static EA_CONSTEXPR value_type infinity()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type quiet_NaN()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type signaling_NaN()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type denorm_min()
- { return (value_type)0; }
- };
-
-
- #if defined(EA_CHAR8_UNIQUE) && EA_CHAR8_UNIQUE
- template<>
- struct numeric_limits<char8_t>
- {
- typedef char8_t value_type;
-
- static EA_CONSTEXPR_OR_CONST bool is_specialized = true;
- static EA_CONSTEXPR_OR_CONST int digits = EASTL_LIMITS_DIGITS(value_type);
- static EA_CONSTEXPR_OR_CONST int digits10 = EASTL_LIMITS_DIGITS10(value_type);
- static EA_CONSTEXPR_OR_CONST int max_digits10 = 0;
- static EA_CONSTEXPR_OR_CONST bool is_signed = EASTL_LIMITS_IS_SIGNED(value_type);
- static EA_CONSTEXPR_OR_CONST bool is_integer = true;
- static EA_CONSTEXPR_OR_CONST bool is_exact = true;
- static EA_CONSTEXPR_OR_CONST int radix = 2;
- static EA_CONSTEXPR_OR_CONST int min_exponent = 0;
- static EA_CONSTEXPR_OR_CONST int min_exponent10 = 0;
- static EA_CONSTEXPR_OR_CONST int max_exponent = 0;
- static EA_CONSTEXPR_OR_CONST int max_exponent10 = 0;
- static EA_CONSTEXPR_OR_CONST bool is_bounded = true;
- static EA_CONSTEXPR_OR_CONST bool is_modulo = true;
- static EA_CONSTEXPR_OR_CONST bool traps = true;
- static EA_CONSTEXPR_OR_CONST bool tinyness_before = false;
- static EA_CONSTEXPR_OR_CONST float_round_style round_style = round_toward_zero;
- static EA_CONSTEXPR_OR_CONST bool has_infinity = false;
- static EA_CONSTEXPR_OR_CONST bool has_quiet_NaN = false;
- static EA_CONSTEXPR_OR_CONST bool has_signaling_NaN = false;
- static EA_CONSTEXPR_OR_CONST float_denorm_style has_denorm = denorm_absent;
- static EA_CONSTEXPR_OR_CONST bool has_denorm_loss = false;
- static EA_CONSTEXPR_OR_CONST bool is_iec559 = false;
-
- static EA_CONSTEXPR value_type min()
- { return EASTL_LIMITS_MIN(value_type); }
-
- static EA_CONSTEXPR value_type max()
- { return EASTL_LIMITS_MAX(value_type); }
-
- static EA_CONSTEXPR value_type lowest()
- { return EASTL_LIMITS_MIN(value_type); }
-
- static EA_CONSTEXPR value_type epsilon()
- { return 0; }
-
- static EA_CONSTEXPR value_type round_error()
- { return 0; }
-
- static EA_CONSTEXPR value_type infinity()
- { return 0; }
-
- static EA_CONSTEXPR value_type quiet_NaN()
- { return 0; }
-
- static EA_CONSTEXPR value_type signaling_NaN()
- { return 0; }
-
- static EA_CONSTEXPR value_type denorm_min()
- { return (value_type)0; }
- };
- #endif
-
- #if EA_CHAR16_NATIVE // If char16_t is a true unique type (as called for by the C++11 Standard)...
-
- // numeric_limits<char16_t>
- template<>
- struct numeric_limits<char16_t>
- {
- typedef char16_t value_type;
-
- static EA_CONSTEXPR_OR_CONST bool is_specialized = true;
- static EA_CONSTEXPR_OR_CONST int digits = EASTL_LIMITS_DIGITS(value_type);
- static EA_CONSTEXPR_OR_CONST int digits10 = EASTL_LIMITS_DIGITS10(value_type);
- static EA_CONSTEXPR_OR_CONST int max_digits10 = 0;
- static EA_CONSTEXPR_OR_CONST bool is_signed = EASTL_LIMITS_IS_SIGNED(value_type);
- static EA_CONSTEXPR_OR_CONST bool is_integer = true;
- static EA_CONSTEXPR_OR_CONST bool is_exact = true;
- static EA_CONSTEXPR_OR_CONST int radix = 2;
- static EA_CONSTEXPR_OR_CONST int min_exponent = 0;
- static EA_CONSTEXPR_OR_CONST int min_exponent10 = 0;
- static EA_CONSTEXPR_OR_CONST int max_exponent = 0;
- static EA_CONSTEXPR_OR_CONST int max_exponent10 = 0;
- static EA_CONSTEXPR_OR_CONST bool is_bounded = true;
- static EA_CONSTEXPR_OR_CONST bool is_modulo = true;
- static EA_CONSTEXPR_OR_CONST bool traps = true;
- static EA_CONSTEXPR_OR_CONST bool tinyness_before = false;
- static EA_CONSTEXPR_OR_CONST float_round_style round_style = round_toward_zero;
- static EA_CONSTEXPR_OR_CONST bool has_infinity = false;
- static EA_CONSTEXPR_OR_CONST bool has_quiet_NaN = false;
- static EA_CONSTEXPR_OR_CONST bool has_signaling_NaN = false;
- static EA_CONSTEXPR_OR_CONST float_denorm_style has_denorm = denorm_absent;
- static EA_CONSTEXPR_OR_CONST bool has_denorm_loss = false;
- static EA_CONSTEXPR_OR_CONST bool is_iec559 = false;
-
- static EA_CONSTEXPR value_type min()
- { return EASTL_LIMITS_MIN(value_type); }
-
- static EA_CONSTEXPR value_type max()
- { return EASTL_LIMITS_MAX(value_type); }
-
- static EA_CONSTEXPR value_type lowest()
- { return EASTL_LIMITS_MIN(value_type); }
-
- static EA_CONSTEXPR value_type epsilon()
- { return 0; }
-
- static EA_CONSTEXPR value_type round_error()
- { return 0; }
-
- static EA_CONSTEXPR value_type infinity()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type quiet_NaN()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type signaling_NaN()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type denorm_min()
- { return (value_type)0; }
- };
-
- #endif
-
-
- #if EA_CHAR32_NATIVE // If char32_t is a true unique type (as called for by the C++11 Standard)...
-
- // numeric_limits<char32_t>
- template<>
- struct numeric_limits<char32_t>
- {
- typedef char32_t value_type;
-
- static EA_CONSTEXPR_OR_CONST bool is_specialized = true;
- static EA_CONSTEXPR_OR_CONST int digits = EASTL_LIMITS_DIGITS(value_type);
- static EA_CONSTEXPR_OR_CONST int digits10 = EASTL_LIMITS_DIGITS10(value_type);
- static EA_CONSTEXPR_OR_CONST int max_digits10 = 0;
- static EA_CONSTEXPR_OR_CONST bool is_signed = EASTL_LIMITS_IS_SIGNED(value_type);
- static EA_CONSTEXPR_OR_CONST bool is_integer = true;
- static EA_CONSTEXPR_OR_CONST bool is_exact = true;
- static EA_CONSTEXPR_OR_CONST int radix = 2;
- static EA_CONSTEXPR_OR_CONST int min_exponent = 0;
- static EA_CONSTEXPR_OR_CONST int min_exponent10 = 0;
- static EA_CONSTEXPR_OR_CONST int max_exponent = 0;
- static EA_CONSTEXPR_OR_CONST int max_exponent10 = 0;
- static EA_CONSTEXPR_OR_CONST bool is_bounded = true;
- static EA_CONSTEXPR_OR_CONST bool is_modulo = true;
- static EA_CONSTEXPR_OR_CONST bool traps = true;
- static EA_CONSTEXPR_OR_CONST bool tinyness_before = false;
- static EA_CONSTEXPR_OR_CONST float_round_style round_style = round_toward_zero;
- static EA_CONSTEXPR_OR_CONST bool has_infinity = false;
- static EA_CONSTEXPR_OR_CONST bool has_quiet_NaN = false;
- static EA_CONSTEXPR_OR_CONST bool has_signaling_NaN = false;
- static EA_CONSTEXPR_OR_CONST float_denorm_style has_denorm = denorm_absent;
- static EA_CONSTEXPR_OR_CONST bool has_denorm_loss = false;
- static EA_CONSTEXPR_OR_CONST bool is_iec559 = false;
-
- static EA_CONSTEXPR value_type min()
- { return EASTL_LIMITS_MIN(value_type); }
-
- static EA_CONSTEXPR value_type max()
- { return EASTL_LIMITS_MAX(value_type); }
-
- static EA_CONSTEXPR value_type lowest()
- { return EASTL_LIMITS_MIN(value_type); }
-
- static EA_CONSTEXPR value_type epsilon()
- { return 0; }
-
- static EA_CONSTEXPR value_type round_error()
- { return 0; }
-
- static EA_CONSTEXPR value_type infinity()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type quiet_NaN()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type signaling_NaN()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type denorm_min()
- { return (value_type)0; }
- };
-
- #endif
-
-
- // numeric_limits<unsigned short>
- template<>
- struct numeric_limits<unsigned short>
- {
- typedef unsigned short value_type;
-
- static EA_CONSTEXPR_OR_CONST bool is_specialized = true;
- static EA_CONSTEXPR_OR_CONST int digits = EASTL_LIMITS_DIGITS_U(value_type);
- static EA_CONSTEXPR_OR_CONST int digits10 = EASTL_LIMITS_DIGITS10_U(value_type);
- static EA_CONSTEXPR_OR_CONST int max_digits10 = 0;
- static EA_CONSTEXPR_OR_CONST bool is_signed = false;
- static EA_CONSTEXPR_OR_CONST bool is_integer = true;
- static EA_CONSTEXPR_OR_CONST bool is_exact = true;
- static EA_CONSTEXPR_OR_CONST int radix = 2;
- static EA_CONSTEXPR_OR_CONST int min_exponent = 0;
- static EA_CONSTEXPR_OR_CONST int min_exponent10 = 0;
- static EA_CONSTEXPR_OR_CONST int max_exponent = 0;
- static EA_CONSTEXPR_OR_CONST int max_exponent10 = 0;
- static EA_CONSTEXPR_OR_CONST bool is_bounded = true;
- static EA_CONSTEXPR_OR_CONST bool is_modulo = true;
- static EA_CONSTEXPR_OR_CONST bool traps = true;
- static EA_CONSTEXPR_OR_CONST bool tinyness_before = false;
- static EA_CONSTEXPR_OR_CONST float_round_style round_style = round_toward_zero;
- static EA_CONSTEXPR_OR_CONST bool has_infinity = false;
- static EA_CONSTEXPR_OR_CONST bool has_quiet_NaN = false;
- static EA_CONSTEXPR_OR_CONST bool has_signaling_NaN = false;
- static EA_CONSTEXPR_OR_CONST float_denorm_style has_denorm = denorm_absent;
- static EA_CONSTEXPR_OR_CONST bool has_denorm_loss = false;
- static EA_CONSTEXPR_OR_CONST bool is_iec559 = false;
-
- static EA_CONSTEXPR value_type min()
- { return 0; }
-
- static EA_CONSTEXPR value_type max()
- { return EASTL_LIMITS_MAX_U(value_type); }
-
- static EA_CONSTEXPR value_type lowest()
- { return 0; }
-
- static EA_CONSTEXPR value_type epsilon()
- { return 0; }
-
- static EA_CONSTEXPR value_type round_error()
- { return 0; }
-
- static EA_CONSTEXPR value_type infinity()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type quiet_NaN()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type signaling_NaN()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type denorm_min()
- { return static_cast<value_type>(0); }
- };
-
-
- // numeric_limits<signed short>
- template<>
- struct numeric_limits<signed short>
- {
- typedef signed short value_type;
-
- static EA_CONSTEXPR_OR_CONST bool is_specialized = true;
- static EA_CONSTEXPR_OR_CONST int digits = EASTL_LIMITS_DIGITS_S(value_type);
- static EA_CONSTEXPR_OR_CONST int digits10 = EASTL_LIMITS_DIGITS10_S(value_type);
- static EA_CONSTEXPR_OR_CONST int max_digits10 = 0;
- static EA_CONSTEXPR_OR_CONST bool is_signed = true;
- static EA_CONSTEXPR_OR_CONST bool is_integer = true;
- static EA_CONSTEXPR_OR_CONST bool is_exact = true;
- static EA_CONSTEXPR_OR_CONST int radix = 2;
- static EA_CONSTEXPR_OR_CONST int min_exponent = 0;
- static EA_CONSTEXPR_OR_CONST int min_exponent10 = 0;
- static EA_CONSTEXPR_OR_CONST int max_exponent = 0;
- static EA_CONSTEXPR_OR_CONST int max_exponent10 = 0;
- static EA_CONSTEXPR_OR_CONST bool is_bounded = true;
- static EA_CONSTEXPR_OR_CONST bool is_modulo = true;
- static EA_CONSTEXPR_OR_CONST bool traps = true;
- static EA_CONSTEXPR_OR_CONST bool tinyness_before = false;
- static EA_CONSTEXPR_OR_CONST float_round_style round_style = round_toward_zero;
- static EA_CONSTEXPR_OR_CONST bool has_infinity = false;
- static EA_CONSTEXPR_OR_CONST bool has_quiet_NaN = false;
- static EA_CONSTEXPR_OR_CONST bool has_signaling_NaN = false;
- static EA_CONSTEXPR_OR_CONST float_denorm_style has_denorm = denorm_absent;
- static EA_CONSTEXPR_OR_CONST bool has_denorm_loss = false;
- static EA_CONSTEXPR_OR_CONST bool is_iec559 = false;
-
- static EA_CONSTEXPR value_type min()
- { return EASTL_LIMITS_MIN_S(value_type); }
-
- static EA_CONSTEXPR value_type max()
- { return EASTL_LIMITS_MAX_S(value_type); }
-
- static EA_CONSTEXPR value_type lowest()
- { return EASTL_LIMITS_MIN_S(value_type); }
-
- static EA_CONSTEXPR value_type epsilon()
- { return 0; }
-
- static EA_CONSTEXPR value_type round_error()
- { return 0; }
-
- static EA_CONSTEXPR value_type infinity()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type quiet_NaN()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type signaling_NaN()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type denorm_min()
- { return static_cast<value_type>(0); }
- };
-
-
-
- // numeric_limits<unsigned int>
- template<>
- struct numeric_limits<unsigned int>
- {
- typedef unsigned int value_type;
-
- static EA_CONSTEXPR_OR_CONST bool is_specialized = true;
- static EA_CONSTEXPR_OR_CONST int digits = EASTL_LIMITS_DIGITS_U(value_type);
- static EA_CONSTEXPR_OR_CONST int digits10 = EASTL_LIMITS_DIGITS10_U(value_type);
- static EA_CONSTEXPR_OR_CONST int max_digits10 = 0;
- static EA_CONSTEXPR_OR_CONST bool is_signed = false;
- static EA_CONSTEXPR_OR_CONST bool is_integer = true;
- static EA_CONSTEXPR_OR_CONST bool is_exact = true;
- static EA_CONSTEXPR_OR_CONST int radix = 2;
- static EA_CONSTEXPR_OR_CONST int min_exponent = 0;
- static EA_CONSTEXPR_OR_CONST int min_exponent10 = 0;
- static EA_CONSTEXPR_OR_CONST int max_exponent = 0;
- static EA_CONSTEXPR_OR_CONST int max_exponent10 = 0;
- static EA_CONSTEXPR_OR_CONST bool is_bounded = true;
- static EA_CONSTEXPR_OR_CONST bool is_modulo = true;
- static EA_CONSTEXPR_OR_CONST bool traps = true;
- static EA_CONSTEXPR_OR_CONST bool tinyness_before = false;
- static EA_CONSTEXPR_OR_CONST float_round_style round_style = round_toward_zero;
- static EA_CONSTEXPR_OR_CONST bool has_infinity = false;
- static EA_CONSTEXPR_OR_CONST bool has_quiet_NaN = false;
- static EA_CONSTEXPR_OR_CONST bool has_signaling_NaN = false;
- static EA_CONSTEXPR_OR_CONST float_denorm_style has_denorm = denorm_absent;
- static EA_CONSTEXPR_OR_CONST bool has_denorm_loss = false;
- static EA_CONSTEXPR_OR_CONST bool is_iec559 = false;
-
- static EA_CONSTEXPR value_type min()
- { return 0; }
-
- static EA_CONSTEXPR value_type max()
- { return EASTL_LIMITS_MAX_U(value_type); }
-
- static EA_CONSTEXPR value_type lowest()
- { return 0; }
-
- static EA_CONSTEXPR value_type epsilon()
- { return 0; }
-
- static EA_CONSTEXPR value_type round_error()
- { return 0; }
-
- static EA_CONSTEXPR value_type infinity()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type quiet_NaN()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type signaling_NaN()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type denorm_min()
- { return static_cast<value_type>(0); }
- };
-
-
- // numeric_limits<signed int>
- template<>
- struct numeric_limits<signed int>
- {
- typedef signed int value_type;
-
- static EA_CONSTEXPR_OR_CONST bool is_specialized = true;
- static EA_CONSTEXPR_OR_CONST int digits = EASTL_LIMITS_DIGITS_S(value_type);
- static EA_CONSTEXPR_OR_CONST int digits10 = EASTL_LIMITS_DIGITS10_S(value_type);
- static EA_CONSTEXPR_OR_CONST int max_digits10 = 0;
- static EA_CONSTEXPR_OR_CONST bool is_signed = true;
- static EA_CONSTEXPR_OR_CONST bool is_integer = true;
- static EA_CONSTEXPR_OR_CONST bool is_exact = true;
- static EA_CONSTEXPR_OR_CONST int radix = 2;
- static EA_CONSTEXPR_OR_CONST int min_exponent = 0;
- static EA_CONSTEXPR_OR_CONST int min_exponent10 = 0;
- static EA_CONSTEXPR_OR_CONST int max_exponent = 0;
- static EA_CONSTEXPR_OR_CONST int max_exponent10 = 0;
- static EA_CONSTEXPR_OR_CONST bool is_bounded = true;
- static EA_CONSTEXPR_OR_CONST bool is_modulo = true;
- static EA_CONSTEXPR_OR_CONST bool traps = true;
- static EA_CONSTEXPR_OR_CONST bool tinyness_before = false;
- static EA_CONSTEXPR_OR_CONST float_round_style round_style = round_toward_zero;
- static EA_CONSTEXPR_OR_CONST bool has_infinity = false;
- static EA_CONSTEXPR_OR_CONST bool has_quiet_NaN = false;
- static EA_CONSTEXPR_OR_CONST bool has_signaling_NaN = false;
- static EA_CONSTEXPR_OR_CONST float_denorm_style has_denorm = denorm_absent;
- static EA_CONSTEXPR_OR_CONST bool has_denorm_loss = false;
- static EA_CONSTEXPR_OR_CONST bool is_iec559 = false;
-
- static EA_CONSTEXPR value_type min()
- { return INT_MIN; } // It's hard to get EASTL_LIMITS_MIN_S to work with all compilers here.
-
- static EA_CONSTEXPR value_type max()
- { return EASTL_LIMITS_MAX_S(value_type); }
-
- static EA_CONSTEXPR value_type lowest()
- { return INT_MIN; }
-
- static EA_CONSTEXPR value_type epsilon()
- { return 0; }
-
- static EA_CONSTEXPR value_type round_error()
- { return 0; }
-
- static EA_CONSTEXPR value_type infinity()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type quiet_NaN()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type signaling_NaN()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type denorm_min()
- { return static_cast<value_type>(0); }
- };
-
-
- // numeric_limits<unsigned long>
- template<>
- struct numeric_limits<unsigned long>
- {
- typedef unsigned long value_type;
-
- static EA_CONSTEXPR_OR_CONST bool is_specialized = true;
- static EA_CONSTEXPR_OR_CONST int digits = EASTL_LIMITS_DIGITS_U(value_type);
- static EA_CONSTEXPR_OR_CONST int digits10 = EASTL_LIMITS_DIGITS10_U(value_type);
- static EA_CONSTEXPR_OR_CONST int max_digits10 = 0;
- static EA_CONSTEXPR_OR_CONST bool is_signed = false;
- static EA_CONSTEXPR_OR_CONST bool is_integer = true;
- static EA_CONSTEXPR_OR_CONST bool is_exact = true;
- static EA_CONSTEXPR_OR_CONST int radix = 2;
- static EA_CONSTEXPR_OR_CONST int min_exponent = 0;
- static EA_CONSTEXPR_OR_CONST int min_exponent10 = 0;
- static EA_CONSTEXPR_OR_CONST int max_exponent = 0;
- static EA_CONSTEXPR_OR_CONST int max_exponent10 = 0;
- static EA_CONSTEXPR_OR_CONST bool is_bounded = true;
- static EA_CONSTEXPR_OR_CONST bool is_modulo = true;
- static EA_CONSTEXPR_OR_CONST bool traps = true;
- static EA_CONSTEXPR_OR_CONST bool tinyness_before = false;
- static EA_CONSTEXPR_OR_CONST float_round_style round_style = round_toward_zero;
- static EA_CONSTEXPR_OR_CONST bool has_infinity = false;
- static EA_CONSTEXPR_OR_CONST bool has_quiet_NaN = false;
- static EA_CONSTEXPR_OR_CONST bool has_signaling_NaN = false;
- static EA_CONSTEXPR_OR_CONST float_denorm_style has_denorm = denorm_absent;
- static EA_CONSTEXPR_OR_CONST bool has_denorm_loss = false;
- static EA_CONSTEXPR_OR_CONST bool is_iec559 = false;
-
- static EA_CONSTEXPR value_type min()
- { return 0; }
-
- static EA_CONSTEXPR value_type max()
- { return EASTL_LIMITS_MAX_U(value_type); }
-
- static EA_CONSTEXPR value_type lowest()
- { return 0; }
-
- static EA_CONSTEXPR value_type epsilon()
- { return 0; }
-
- static EA_CONSTEXPR value_type round_error()
- { return 0; }
-
- static EA_CONSTEXPR value_type infinity()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type quiet_NaN()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type signaling_NaN()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type denorm_min()
- { return static_cast<value_type>(0); }
- };
-
-
- // numeric_limits<signed long>
- template<>
- struct numeric_limits<signed long>
- {
- typedef signed long value_type;
-
- static EA_CONSTEXPR_OR_CONST bool is_specialized = true;
- static EA_CONSTEXPR_OR_CONST int digits = EASTL_LIMITS_DIGITS_S(value_type);
- static EA_CONSTEXPR_OR_CONST int digits10 = EASTL_LIMITS_DIGITS10_S(value_type);
- static EA_CONSTEXPR_OR_CONST int max_digits10 = 0;
- static EA_CONSTEXPR_OR_CONST bool is_signed = true;
- static EA_CONSTEXPR_OR_CONST bool is_integer = true;
- static EA_CONSTEXPR_OR_CONST bool is_exact = true;
- static EA_CONSTEXPR_OR_CONST int radix = 2;
- static EA_CONSTEXPR_OR_CONST int min_exponent = 0;
- static EA_CONSTEXPR_OR_CONST int min_exponent10 = 0;
- static EA_CONSTEXPR_OR_CONST int max_exponent = 0;
- static EA_CONSTEXPR_OR_CONST int max_exponent10 = 0;
- static EA_CONSTEXPR_OR_CONST bool is_bounded = true;
- static EA_CONSTEXPR_OR_CONST bool is_modulo = true;
- static EA_CONSTEXPR_OR_CONST bool traps = true;
- static EA_CONSTEXPR_OR_CONST bool tinyness_before = false;
- static EA_CONSTEXPR_OR_CONST float_round_style round_style = round_toward_zero;
- static EA_CONSTEXPR_OR_CONST bool has_infinity = false;
- static EA_CONSTEXPR_OR_CONST bool has_quiet_NaN = false;
- static EA_CONSTEXPR_OR_CONST bool has_signaling_NaN = false;
- static EA_CONSTEXPR_OR_CONST float_denorm_style has_denorm = denorm_absent;
- static EA_CONSTEXPR_OR_CONST bool has_denorm_loss = false;
- static EA_CONSTEXPR_OR_CONST bool is_iec559 = false;
-
- static EA_CONSTEXPR value_type min()
- { return LONG_MIN; } // It's hard to get EASTL_LIMITS_MIN_S to work with all compilers here.
-
- static EA_CONSTEXPR value_type max()
- { return EASTL_LIMITS_MAX_S(value_type); }
-
- static EA_CONSTEXPR value_type lowest()
- { return LONG_MIN; }
-
- static EA_CONSTEXPR value_type epsilon()
- { return 0; }
-
- static EA_CONSTEXPR value_type round_error()
- { return 0; }
-
- static EA_CONSTEXPR value_type infinity()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type quiet_NaN()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type signaling_NaN()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type denorm_min()
- { return static_cast<value_type>(0); }
- };
-
-
- // numeric_limits<unsigned long long>
- template<>
- struct numeric_limits<unsigned long long>
- {
- typedef unsigned long long value_type;
-
- static EA_CONSTEXPR_OR_CONST bool is_specialized = true;
- static EA_CONSTEXPR_OR_CONST int digits = EASTL_LIMITS_DIGITS_U(value_type);
- static EA_CONSTEXPR_OR_CONST int digits10 = EASTL_LIMITS_DIGITS10_U(value_type);
- static EA_CONSTEXPR_OR_CONST int max_digits10 = 0;
- static EA_CONSTEXPR_OR_CONST bool is_signed = false;
- static EA_CONSTEXPR_OR_CONST bool is_integer = true;
- static EA_CONSTEXPR_OR_CONST bool is_exact = true;
- static EA_CONSTEXPR_OR_CONST int radix = 2;
- static EA_CONSTEXPR_OR_CONST int min_exponent = 0;
- static EA_CONSTEXPR_OR_CONST int min_exponent10 = 0;
- static EA_CONSTEXPR_OR_CONST int max_exponent = 0;
- static EA_CONSTEXPR_OR_CONST int max_exponent10 = 0;
- static EA_CONSTEXPR_OR_CONST bool is_bounded = true;
- static EA_CONSTEXPR_OR_CONST bool is_modulo = true;
- static EA_CONSTEXPR_OR_CONST bool traps = true;
- static EA_CONSTEXPR_OR_CONST bool tinyness_before = false;
- static EA_CONSTEXPR_OR_CONST float_round_style round_style = round_toward_zero;
- static EA_CONSTEXPR_OR_CONST bool has_infinity = false;
- static EA_CONSTEXPR_OR_CONST bool has_quiet_NaN = false;
- static EA_CONSTEXPR_OR_CONST bool has_signaling_NaN = false;
- static EA_CONSTEXPR_OR_CONST float_denorm_style has_denorm = denorm_absent;
- static EA_CONSTEXPR_OR_CONST bool has_denorm_loss = false;
- static EA_CONSTEXPR_OR_CONST bool is_iec559 = false;
-
- static EA_CONSTEXPR value_type min()
- { return 0; }
-
- static EA_CONSTEXPR value_type max()
- { return EASTL_LIMITS_MAX_U(value_type); }
-
- static EA_CONSTEXPR value_type lowest()
- { return 0; }
-
- static EA_CONSTEXPR value_type epsilon()
- { return 0; }
-
- static EA_CONSTEXPR value_type round_error()
- { return 0; }
-
- static EA_CONSTEXPR value_type infinity()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type quiet_NaN()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type signaling_NaN()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type denorm_min()
- { return static_cast<value_type>(0); }
- };
-
-
- // numeric_limits<signed long long>
- template<>
- struct numeric_limits<signed long long>
- {
- typedef signed long long value_type;
-
- static EA_CONSTEXPR_OR_CONST bool is_specialized = true;
- static EA_CONSTEXPR_OR_CONST int digits = EASTL_LIMITS_DIGITS_S(value_type);
- static EA_CONSTEXPR_OR_CONST int digits10 = EASTL_LIMITS_DIGITS10_S(value_type);
- static EA_CONSTEXPR_OR_CONST int max_digits10 = 0;
- static EA_CONSTEXPR_OR_CONST bool is_signed = true;
- static EA_CONSTEXPR_OR_CONST bool is_integer = true;
- static EA_CONSTEXPR_OR_CONST bool is_exact = true;
- static EA_CONSTEXPR_OR_CONST int radix = 2;
- static EA_CONSTEXPR_OR_CONST int min_exponent = 0;
- static EA_CONSTEXPR_OR_CONST int min_exponent10 = 0;
- static EA_CONSTEXPR_OR_CONST int max_exponent = 0;
- static EA_CONSTEXPR_OR_CONST int max_exponent10 = 0;
- static EA_CONSTEXPR_OR_CONST bool is_bounded = true;
- static EA_CONSTEXPR_OR_CONST bool is_modulo = true;
- static EA_CONSTEXPR_OR_CONST bool traps = true;
- static EA_CONSTEXPR_OR_CONST bool tinyness_before = false;
- static EA_CONSTEXPR_OR_CONST float_round_style round_style = round_toward_zero;
- static EA_CONSTEXPR_OR_CONST bool has_infinity = false;
- static EA_CONSTEXPR_OR_CONST bool has_quiet_NaN = false;
- static EA_CONSTEXPR_OR_CONST bool has_signaling_NaN = false;
- static EA_CONSTEXPR_OR_CONST float_denorm_style has_denorm = denorm_absent;
- static EA_CONSTEXPR_OR_CONST bool has_denorm_loss = false;
- static EA_CONSTEXPR_OR_CONST bool is_iec559 = false;
-
- static EA_CONSTEXPR value_type min()
- { return EASTL_LIMITS_MIN_S(value_type); }
-
- static EA_CONSTEXPR value_type max()
- { return EASTL_LIMITS_MAX_S(value_type); }
-
- static EA_CONSTEXPR value_type lowest()
- { return EASTL_LIMITS_MIN_S(value_type); }
-
- static EA_CONSTEXPR value_type epsilon()
- { return 0; }
-
- static EA_CONSTEXPR value_type round_error()
- { return 0; }
-
- static EA_CONSTEXPR value_type infinity()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type quiet_NaN()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type signaling_NaN()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type denorm_min()
- { return static_cast<value_type>(0); }
- };
-
-
- #if (EA_COMPILER_INTMAX_SIZE >= 16) && (defined(EA_COMPILER_GNUC) || defined(__clang__)) // If __int128_t/__uint128_t is supported...
- // numeric_limits<__uint128_t>
- template<>
- struct numeric_limits<__uint128_t>
- {
- typedef __uint128_t value_type;
-
- static EA_CONSTEXPR_OR_CONST bool is_specialized = true;
- static EA_CONSTEXPR_OR_CONST int digits = EASTL_LIMITS_DIGITS_U(value_type);
- static EA_CONSTEXPR_OR_CONST int digits10 = EASTL_LIMITS_DIGITS10_U(value_type);
- static EA_CONSTEXPR_OR_CONST int max_digits10 = 0;
- static EA_CONSTEXPR_OR_CONST bool is_signed = false;
- static EA_CONSTEXPR_OR_CONST bool is_integer = true;
- static EA_CONSTEXPR_OR_CONST bool is_exact = true;
- static EA_CONSTEXPR_OR_CONST int radix = 2;
- static EA_CONSTEXPR_OR_CONST int min_exponent = 0;
- static EA_CONSTEXPR_OR_CONST int min_exponent10 = 0;
- static EA_CONSTEXPR_OR_CONST int max_exponent = 0;
- static EA_CONSTEXPR_OR_CONST int max_exponent10 = 0;
- static EA_CONSTEXPR_OR_CONST bool is_bounded = true;
- static EA_CONSTEXPR_OR_CONST bool is_modulo = true;
- static EA_CONSTEXPR_OR_CONST bool traps = true;
- static EA_CONSTEXPR_OR_CONST bool tinyness_before = false;
- static EA_CONSTEXPR_OR_CONST float_round_style round_style = round_toward_zero;
- static EA_CONSTEXPR_OR_CONST bool has_infinity = false;
- static EA_CONSTEXPR_OR_CONST bool has_quiet_NaN = false;
- static EA_CONSTEXPR_OR_CONST bool has_signaling_NaN = false;
- static EA_CONSTEXPR_OR_CONST float_denorm_style has_denorm = denorm_absent;
- static EA_CONSTEXPR_OR_CONST bool has_denorm_loss = false;
- static EA_CONSTEXPR_OR_CONST bool is_iec559 = false;
-
- static EA_CONSTEXPR value_type min()
- { return 0; }
-
- static EA_CONSTEXPR value_type max()
- { return EASTL_LIMITS_MAX_U(value_type); }
-
- static EA_CONSTEXPR value_type lowest()
- { return 0; }
-
- static EA_CONSTEXPR value_type epsilon()
- { return 0; }
-
- static EA_CONSTEXPR value_type round_error()
- { return 0; }
-
- static EA_CONSTEXPR value_type infinity()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type quiet_NaN()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type signaling_NaN()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type denorm_min()
- { return static_cast<value_type>(0); }
- };
-
-
- // numeric_limits<__int128_t>
- template<>
- struct numeric_limits<__int128_t>
- {
- typedef __int128_t value_type;
-
- static EA_CONSTEXPR_OR_CONST bool is_specialized = true;
- static EA_CONSTEXPR_OR_CONST int digits = EASTL_LIMITS_DIGITS_S(value_type);
- static EA_CONSTEXPR_OR_CONST int digits10 = EASTL_LIMITS_DIGITS10_S(value_type);
- static EA_CONSTEXPR_OR_CONST int max_digits10 = 0;
- static EA_CONSTEXPR_OR_CONST bool is_signed = true;
- static EA_CONSTEXPR_OR_CONST bool is_integer = true;
- static EA_CONSTEXPR_OR_CONST bool is_exact = true;
- static EA_CONSTEXPR_OR_CONST int radix = 2;
- static EA_CONSTEXPR_OR_CONST int min_exponent = 0;
- static EA_CONSTEXPR_OR_CONST int min_exponent10 = 0;
- static EA_CONSTEXPR_OR_CONST int max_exponent = 0;
- static EA_CONSTEXPR_OR_CONST int max_exponent10 = 0;
- static EA_CONSTEXPR_OR_CONST bool is_bounded = true;
- static EA_CONSTEXPR_OR_CONST bool is_modulo = true;
- static EA_CONSTEXPR_OR_CONST bool traps = true;
- static EA_CONSTEXPR_OR_CONST bool tinyness_before = false;
- static EA_CONSTEXPR_OR_CONST float_round_style round_style = round_toward_zero;
- static EA_CONSTEXPR_OR_CONST bool has_infinity = false;
- static EA_CONSTEXPR_OR_CONST bool has_quiet_NaN = false;
- static EA_CONSTEXPR_OR_CONST bool has_signaling_NaN = false;
- static EA_CONSTEXPR_OR_CONST float_denorm_style has_denorm = denorm_absent;
- static EA_CONSTEXPR_OR_CONST bool has_denorm_loss = false;
- static EA_CONSTEXPR_OR_CONST bool is_iec559 = false;
-
- static EA_CONSTEXPR value_type min()
- { return EASTL_LIMITS_MIN_S(value_type); }
-
- static EA_CONSTEXPR value_type max()
- { return EASTL_LIMITS_MAX_S(value_type); }
-
- static EA_CONSTEXPR value_type lowest()
- { return EASTL_LIMITS_MIN_S(value_type); }
-
- static EA_CONSTEXPR value_type epsilon()
- { return 0; }
-
- static EA_CONSTEXPR value_type round_error()
- { return 0; }
-
- static EA_CONSTEXPR value_type infinity()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type quiet_NaN()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type signaling_NaN()
- { return value_type(); }
-
- static EA_CONSTEXPR value_type denorm_min()
- { return static_cast<value_type>(0); }
- };
- #endif
-
-
- // numeric_limits<float>
- template<>
- struct numeric_limits<float>
- {
- typedef float value_type;
-
- static EA_CONSTEXPR_OR_CONST bool is_specialized = true;
- static EA_CONSTEXPR_OR_CONST int digits = FLT_MANT_DIG;
- static EA_CONSTEXPR_OR_CONST int digits10 = FLT_DIG;
- static EA_CONSTEXPR_OR_CONST int max_digits10 = FLT_MANT_DIG;
- static EA_CONSTEXPR_OR_CONST bool is_signed = true;
- static EA_CONSTEXPR_OR_CONST bool is_integer = false;
- static EA_CONSTEXPR_OR_CONST bool is_exact = false;
- static EA_CONSTEXPR_OR_CONST int radix = FLT_RADIX;
- static EA_CONSTEXPR_OR_CONST int min_exponent = FLT_MIN_EXP;
- static EA_CONSTEXPR_OR_CONST int min_exponent10 = FLT_MIN_10_EXP;
- static EA_CONSTEXPR_OR_CONST int max_exponent = FLT_MAX_EXP;
- static EA_CONSTEXPR_OR_CONST int max_exponent10 = FLT_MAX_10_EXP;
- static EA_CONSTEXPR_OR_CONST bool is_bounded = true;
- static EA_CONSTEXPR_OR_CONST bool is_modulo = false;
- static EA_CONSTEXPR_OR_CONST bool traps = true;
- static EA_CONSTEXPR_OR_CONST bool tinyness_before = false;
- static EA_CONSTEXPR_OR_CONST float_round_style round_style = round_to_nearest;
- static EA_CONSTEXPR_OR_CONST bool has_infinity = true;
- static EA_CONSTEXPR_OR_CONST bool has_quiet_NaN = true; // This may be wrong for some platforms.
- static EA_CONSTEXPR_OR_CONST bool has_signaling_NaN = true; // This may be wrong for some platforms.
- static EA_CONSTEXPR_OR_CONST float_denorm_style has_denorm = denorm_present; // This may be wrong for some platforms.
- static EA_CONSTEXPR_OR_CONST bool has_denorm_loss = false; // This may be wrong for some platforms.
- static EA_CONSTEXPR_OR_CONST bool is_iec559 = has_infinity && has_quiet_NaN && (has_denorm == denorm_present);
-
- #if EASTL_CUSTOM_FLOAT_CONSTANTS_REQUIRED
- static value_type min()
- { return FLT_MIN; }
-
- static value_type max()
- { return FLT_MAX; }
-
- static value_type lowest()
- { return -FLT_MAX; }
-
- static value_type epsilon()
- { return FLT_EPSILON; }
-
- static value_type round_error()
- { return 0.5f; }
-
- static value_type infinity()
- { return Internal::gFloatInfinity; }
-
- static value_type quiet_NaN()
- { return Internal::gFloatNaN; }
-
- static value_type signaling_NaN()
- { return Internal::gFloatSNaN; }
-
- static value_type denorm_min()
- { return Internal::gFloatDenorm; }
-
- #elif (defined(EA_COMPILER_GNUC) || defined(__clang__)) && defined(__FLT_MIN__)
- static EA_CONSTEXPR value_type min()
- { return __FLT_MIN__; }
-
- static EA_CONSTEXPR value_type max()
- { return __FLT_MAX__; }
-
- static EA_CONSTEXPR value_type lowest()
- { return -__FLT_MAX__; }
-
- static EA_CONSTEXPR value_type epsilon()
- { return __FLT_EPSILON__; }
-
- static EA_CONSTEXPR value_type round_error()
- { return 0.5f; }
-
- static EA_CONSTEXPR value_type infinity()
- { return __builtin_huge_valf(); }
-
- static EA_CONSTEXPR value_type quiet_NaN()
- { return __builtin_nanf(""); }
-
- static EA_CONSTEXPR value_type signaling_NaN()
- { return __builtin_nansf(""); }
-
- static EA_CONSTEXPR value_type denorm_min()
- { return __FLT_DENORM_MIN__; }
-
- #elif defined(_CPPLIB_VER) // If using the Dinkumware Standard library...
- static value_type min()
- { return FLT_MIN; }
-
- static value_type max()
- { return FLT_MAX; }
-
- static value_type lowest()
- { return -FLT_MAX; }
-
- static value_type epsilon()
- { return FLT_EPSILON; }
-
- static value_type round_error()
- { return 0.5f; }
-
- #if defined(_MSVC_STL_UPDATE) && _MSVC_STL_UPDATE >= 202206L // If using a recent version of MSVC's STL...
- static value_type infinity()
- { return __builtin_huge_valf(); }
-
- static value_type quiet_NaN()
- { return __builtin_nanf("0"); }
-
- static value_type signaling_NaN()
- { return __builtin_nansf("1"); }
-
- static value_type denorm_min()
- { return FLT_TRUE_MIN; }
- #else
- static value_type infinity()
- { return _CSTD _FInf._Float; }
-
- static value_type quiet_NaN()
- { return _CSTD _FNan._Float; }
-
- static value_type signaling_NaN()
- { return _CSTD _FSnan._Float; }
-
- static value_type denorm_min()
- { return _CSTD _FDenorm._Float; }
- #endif
-
- #endif
- };
-
-
- // numeric_limits<double>
- template<>
- struct numeric_limits<double>
- {
- typedef double value_type;
-
- static EA_CONSTEXPR_OR_CONST bool is_specialized = true;
- static EA_CONSTEXPR_OR_CONST int digits = DBL_MANT_DIG;
- static EA_CONSTEXPR_OR_CONST int digits10 = DBL_DIG;
- static EA_CONSTEXPR_OR_CONST int max_digits10 = DBL_MANT_DIG;
- static EA_CONSTEXPR_OR_CONST bool is_signed = true;
- static EA_CONSTEXPR_OR_CONST bool is_integer = false;
- static EA_CONSTEXPR_OR_CONST bool is_exact = false;
- static EA_CONSTEXPR_OR_CONST int radix = FLT_RADIX; // FLT_RADIX applies to all floating point types.
- static EA_CONSTEXPR_OR_CONST int min_exponent = DBL_MIN_EXP;
- static EA_CONSTEXPR_OR_CONST int min_exponent10 = DBL_MIN_10_EXP;
- static EA_CONSTEXPR_OR_CONST int max_exponent = DBL_MAX_EXP;
- static EA_CONSTEXPR_OR_CONST int max_exponent10 = DBL_MAX_10_EXP;
- static EA_CONSTEXPR_OR_CONST bool is_bounded = true;
- static EA_CONSTEXPR_OR_CONST bool is_modulo = false;
- static EA_CONSTEXPR_OR_CONST bool traps = true;
- static EA_CONSTEXPR_OR_CONST bool tinyness_before = false;
- static EA_CONSTEXPR_OR_CONST float_round_style round_style = round_to_nearest;
- static EA_CONSTEXPR_OR_CONST bool has_infinity = true;
- static EA_CONSTEXPR_OR_CONST bool has_quiet_NaN = true; // This may be wrong for some platforms.
- static EA_CONSTEXPR_OR_CONST bool has_signaling_NaN = true; // This may be wrong for some platforms.
- static EA_CONSTEXPR_OR_CONST float_denorm_style has_denorm = denorm_present; // This may be wrong for some platforms.
- static EA_CONSTEXPR_OR_CONST bool has_denorm_loss = false; // This may be wrong for some platforms.
- static EA_CONSTEXPR_OR_CONST bool is_iec559 = has_infinity && has_quiet_NaN && (has_denorm == denorm_present);
-
- #if EASTL_CUSTOM_FLOAT_CONSTANTS_REQUIRED
- static value_type min()
- { return DBL_MIN; }
-
- static value_type max()
- { return DBL_MAX; }
-
- static value_type lowest()
- { return -DBL_MAX; }
-
- static value_type epsilon()
- { return DBL_EPSILON; }
-
- static value_type round_error()
- { return 0.5f; }
-
- static value_type infinity()
- { return Internal::gDoubleInfinity; }
-
- static value_type quiet_NaN()
- { return Internal::gDoubleNaN; }
-
- static value_type signaling_NaN()
- { return Internal::gDoubleSNaN; }
-
- static value_type denorm_min()
- { return Internal::gDoubleDenorm; }
-
- #elif (defined(EA_COMPILER_GNUC) || defined(__clang__)) && defined(__DBL_MIN__)
- static EA_CONSTEXPR value_type min()
- { return __DBL_MIN__; }
-
- static EA_CONSTEXPR value_type max()
- { return __DBL_MAX__; }
-
- static EA_CONSTEXPR value_type lowest()
- { return -__DBL_MAX__; }
-
- static EA_CONSTEXPR value_type epsilon()
- { return __DBL_EPSILON__; }
-
- static EA_CONSTEXPR value_type round_error()
- { return 0.5f; }
-
- static EA_CONSTEXPR value_type infinity()
- { return __builtin_huge_val(); }
-
- static EA_CONSTEXPR value_type quiet_NaN()
- { return __builtin_nan(""); }
-
- static EA_CONSTEXPR value_type signaling_NaN()
- { return __builtin_nans(""); }
-
- static EA_CONSTEXPR value_type denorm_min()
- { return __DBL_DENORM_MIN__; }
-
- #elif defined(_CPPLIB_VER) // If using the Dinkumware Standard library...
- static value_type min()
- { return DBL_MIN; }
-
- static value_type max()
- { return DBL_MAX; }
-
- static value_type lowest()
- { return -DBL_MAX; }
-
- static value_type epsilon()
- { return DBL_EPSILON; }
-
- static value_type round_error()
- { return 0.5f; }
-
- #if defined(_MSVC_STL_UPDATE) && _MSVC_STL_UPDATE >= 202206L // If using a recent version of MSVC's STL...
- static value_type infinity()
- { return __builtin_huge_val(); }
-
- static value_type quiet_NaN()
- { return __builtin_nan("0"); }
-
- static value_type signaling_NaN()
- { return __builtin_nans("1"); }
-
- static value_type denorm_min()
- { return DBL_TRUE_MIN; }
- #else
- static value_type infinity()
- { return _CSTD _Inf._Double; }
-
- static value_type quiet_NaN()
- { return _CSTD _Nan._Double; }
-
- static value_type signaling_NaN()
- { return _CSTD _Snan._Double; }
-
- static value_type denorm_min()
- { return _CSTD _Denorm._Double; }
- #endif
-
- #endif
- };
-
-
- // numeric_limits<long double>
- template<>
- struct numeric_limits<long double>
- {
- typedef long double value_type;
-
- static EA_CONSTEXPR_OR_CONST bool is_specialized = true;
- static EA_CONSTEXPR_OR_CONST int digits = LDBL_MANT_DIG;
- static EA_CONSTEXPR_OR_CONST int digits10 = LDBL_DIG;
- static EA_CONSTEXPR_OR_CONST int max_digits10 = LDBL_MANT_DIG;
- static EA_CONSTEXPR_OR_CONST bool is_signed = true;
- static EA_CONSTEXPR_OR_CONST bool is_integer = false;
- static EA_CONSTEXPR_OR_CONST bool is_exact = false;
- static EA_CONSTEXPR_OR_CONST int radix = FLT_RADIX; // FLT_RADIX applies to all floating point types.
- static EA_CONSTEXPR_OR_CONST int min_exponent = LDBL_MIN_EXP;
- static EA_CONSTEXPR_OR_CONST int min_exponent10 = LDBL_MIN_10_EXP;
- static EA_CONSTEXPR_OR_CONST int max_exponent = LDBL_MAX_EXP;
- static EA_CONSTEXPR_OR_CONST int max_exponent10 = LDBL_MAX_10_EXP;
- static EA_CONSTEXPR_OR_CONST bool is_bounded = true;
- static EA_CONSTEXPR_OR_CONST bool is_modulo = false;
- static EA_CONSTEXPR_OR_CONST bool traps = true;
- static EA_CONSTEXPR_OR_CONST bool tinyness_before = false;
- static EA_CONSTEXPR_OR_CONST float_round_style round_style = round_to_nearest;
- static EA_CONSTEXPR_OR_CONST bool has_infinity = true;
- static EA_CONSTEXPR_OR_CONST bool has_quiet_NaN = true; // This may be wrong for some platforms.
- static EA_CONSTEXPR_OR_CONST bool has_signaling_NaN = true; // This may be wrong for some platforms.
- static EA_CONSTEXPR_OR_CONST float_denorm_style has_denorm = denorm_present; // This may be wrong for some platforms.
- static EA_CONSTEXPR_OR_CONST bool has_denorm_loss = false; // This may be wrong for some platforms.
- static EA_CONSTEXPR_OR_CONST bool is_iec559 = has_infinity && has_quiet_NaN && (has_denorm == denorm_present);
-
- #if EASTL_CUSTOM_FLOAT_CONSTANTS_REQUIRED
- static value_type min()
- { return LDBL_MIN; }
-
- static value_type max()
- { return LDBL_MAX; }
-
- static value_type lowest()
- { return -LDBL_MAX; }
-
- static value_type epsilon()
- { return LDBL_EPSILON; }
-
- static value_type round_error()
- { return 0.5f; }
-
- static value_type infinity()
- { return Internal::gLongDoubleInfinity; }
-
- static value_type quiet_NaN()
- { return Internal::gLongDoubleNaN; }
-
- static value_type signaling_NaN()
- { return Internal::gLongDoubleSNaN; }
-
- static value_type denorm_min()
- { return Internal::gLongDoubleDenorm; }
-
- #elif (defined(EA_COMPILER_GNUC) || defined(__clang__)) && defined(__LDBL_MIN__)
- static EA_CONSTEXPR value_type min()
- { return __LDBL_MIN__; }
-
- static EA_CONSTEXPR value_type max()
- { return __LDBL_MAX__; }
-
- static EA_CONSTEXPR value_type lowest()
- { return -__LDBL_MAX__; }
-
- static EA_CONSTEXPR value_type epsilon()
- { return __LDBL_EPSILON__; }
-
- static EA_CONSTEXPR value_type round_error()
- { return 0.5f; }
-
- static EA_CONSTEXPR value_type infinity()
- { return __builtin_huge_val(); }
-
- static EA_CONSTEXPR value_type quiet_NaN()
- { return __builtin_nan(""); }
-
- static EA_CONSTEXPR value_type signaling_NaN()
- { return __builtin_nans(""); }
-
- static EA_CONSTEXPR value_type denorm_min()
- { return __LDBL_DENORM_MIN__; }
-
- #elif defined(_CPPLIB_VER) // If using the Dinkumware Standard library...
- static value_type min()
- { return LDBL_MIN; }
-
- static value_type max()
- { return LDBL_MAX; }
-
- static value_type lowest()
- { return -LDBL_MAX; }
-
- static value_type epsilon()
- { return LDBL_EPSILON; }
-
- static value_type round_error()
- { return 0.5f; }
-
- #if defined(_MSVC_STL_UPDATE) && _MSVC_STL_UPDATE >= 202206L // If using a recent version of MSVC's STL...
- static value_type infinity()
- { return __builtin_huge_val(); }
-
- static value_type quiet_NaN()
- { return __builtin_nan("0"); }
-
- static value_type signaling_NaN()
- { return __builtin_nans("1"); }
-
- static value_type denorm_min()
- { return LDBL_TRUE_MIN; }
- #else
- static value_type infinity()
- { return _CSTD _LInf._Long_double; }
-
- static value_type quiet_NaN()
- { return _CSTD _LNan._Long_double; }
-
- static value_type signaling_NaN()
- { return _CSTD _LSnan._Long_double; }
-
- static value_type denorm_min()
- { return _CSTD _LDenorm._Long_double; }
- #endif
-
- #endif
- };
-
-} // namespace eastl
-
-
-EA_RESTORE_VC_WARNING()
-
-
-#endif // Header include guard
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-