1e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* 2e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Copyright (c) 1998,1999 3e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Silicon Graphics Computer Systems, Inc. 4e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * 5e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Copyright (c) 1999 6e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Boris Fomitchev 7e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * 8e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * This material is provided "as is", with absolutely no warranty expressed 9e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * or implied. Any use is at your own risk. 10e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * 11e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Permission to use or copy this software for any purpose is hereby granted 12e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * without fee, provided the above notices are retained on all copies. 13e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Permission to modify the code and to distribute modified code is granted, 14e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * provided the above notices are retained, and a notice that the code was 15e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * modified is included with the above copyright notice. 16e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * 17e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott */ 18e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 19e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_LIMITS_C 20e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#define _STLP_LIMITS_C 21e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 22e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#ifndef _STLP_INTERNAL_LIMITS 23e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include <stl/_limits.h> 24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 25e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 26e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//========================================================== 27e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// numeric_limits static members 28e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//========================================================== 29e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 30e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_BEGIN_NAMESPACE 31e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 32e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_MOVE_TO_PRIV_NAMESPACE 33e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 34e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_STATIC_CONST_INIT_BUG) && !defined (_STLP_NO_STATIC_CONST_DEFINITION) 35e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 36e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define __declare_numeric_base_member(__type, __mem) \ 37e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class __number> \ 38e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const __type _Numeric_limits_base<__number>:: __mem 39e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 40e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_numeric_base_member(bool, is_specialized); 41e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_numeric_base_member(int, digits); 42e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_numeric_base_member(int, digits10); 43e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_numeric_base_member(bool, is_signed); 44e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_numeric_base_member(bool, is_integer); 45e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_numeric_base_member(bool, is_exact); 46e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_numeric_base_member(int, radix); 47e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_numeric_base_member(int, min_exponent); 48e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_numeric_base_member(int, max_exponent); 49e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_numeric_base_member(int, min_exponent10); 50e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_numeric_base_member(int, max_exponent10); 51e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_numeric_base_member(bool, has_infinity); 52e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_numeric_base_member(bool, has_quiet_NaN); 53e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_numeric_base_member(bool, has_signaling_NaN); 54e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_numeric_base_member(float_denorm_style, has_denorm); 55e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_numeric_base_member(bool, has_denorm_loss); 56e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_numeric_base_member(bool, is_iec559); 57e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_numeric_base_member(bool, is_bounded); 58e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_numeric_base_member(bool, is_modulo); 59e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_numeric_base_member(bool, traps); 60e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_numeric_base_member(bool, tinyness_before); 61e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_numeric_base_member(float_round_style, round_style); 62e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 63e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# undef __declare_numeric_base_member 64e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 65e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define __declare_integer_limits_member(__type, __mem) \ 66e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class _Int, _STLP_LIMITS_MIN_TYPE __imin, _STLP_LIMITS_MAX_TYPE __imax, int __idigits, bool __ismod> \ 67e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const __type _Integer_limits<_Int, __imin, __imax, __idigits, __ismod>:: __mem 68e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 69e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_integer_limits_member(bool, is_specialized); 70e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_integer_limits_member(int, digits); 71e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_integer_limits_member(int, digits10); 72e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_integer_limits_member(bool, is_signed); 73e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_integer_limits_member(bool, is_integer); 74e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_integer_limits_member(bool, is_exact); 75e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_integer_limits_member(int, radix); 76e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_integer_limits_member(bool, is_bounded); 77e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_integer_limits_member(bool, is_modulo); 78e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# undef __declare_integer_limits_member 79e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 80e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (__GNUC__) && (__GNUC__ != 2 || __GNUC_MINOR__ > 96) && (__GNUC__ != 3 || __GNUC_MINOR__ == 0) && (__GNUC__ <= 3) 81e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_MOVE_TO_STD_NAMESPACE 82e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 83e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define __declare_numeric_limits_member(__integer) \ 84e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_TEMPLATE_NULL const int numeric_limits<__integer>::digits; \ 85e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_TEMPLATE_NULL const int numeric_limits<__integer>::digits10; \ 86e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_TEMPLATE_NULL const int numeric_limits<__integer>::radix; \ 87e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_TEMPLATE_NULL const bool numeric_limits<__integer>::is_specialized; \ 88e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_TEMPLATE_NULL const bool numeric_limits<__integer>::is_signed; \ 89e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_TEMPLATE_NULL const bool numeric_limits<__integer>::is_integer; \ 90e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_TEMPLATE_NULL const bool numeric_limits<__integer>::is_exact; \ 91e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_TEMPLATE_NULL const bool numeric_limits<__integer>::is_bounded; \ 92e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_TEMPLATE_NULL const bool numeric_limits<__integer>::is_modulo 93e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 94e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_numeric_limits_member(_STLP_LONG_LONG); 95e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_numeric_limits_member(unsigned _STLP_LONG_LONG); 96e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 97e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# undef __declare_numeric_limits_member 98e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 99e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_MOVE_TO_PRIV_NAMESPACE 100e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 101e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 102e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define __declare_float_limits_member(__type, __mem) \ 103e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class __number, \ 104e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int __Digits, int __Digits10, \ 105e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int __MinExp, int __MaxExp, \ 106e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int __MinExp10, int __MaxExp10, \ 107e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott bool __IsIEC559, \ 108e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott float_denorm_style __DenormStyle, \ 109e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott float_round_style __RoundStyle> \ 110e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottconst __type _Floating_limits< __number, __Digits, __Digits10, \ 111e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott __MinExp, __MaxExp, __MinExp10, __MaxExp10, \ 112e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott __IsIEC559, __DenormStyle, __RoundStyle>::\ 113e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott __mem 114e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 115e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_float_limits_member(bool, is_specialized); 116e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_float_limits_member(int, digits); 117e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_float_limits_member(int, digits10); 118e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_float_limits_member(bool, is_signed); 119e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_float_limits_member(int, radix); 120e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_float_limits_member(int, min_exponent); 121e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_float_limits_member(int, max_exponent); 122e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_float_limits_member(int, min_exponent10); 123e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_float_limits_member(int, max_exponent10); 124e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_float_limits_member(bool, has_infinity); 125e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_float_limits_member(bool, has_quiet_NaN); 126e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_float_limits_member(bool, has_signaling_NaN); 127e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_float_limits_member(float_denorm_style, has_denorm); 128e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_float_limits_member(bool, has_denorm_loss); 129e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_float_limits_member(bool, is_iec559); 130e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_float_limits_member(bool, is_bounded); 131e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_float_limits_member(bool, traps); 132e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_float_limits_member(bool, tinyness_before); 133e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__declare_float_limits_member(float_round_style, round_style); 134e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# undef __declare_float_limits_member 135e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 136e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 137e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 138e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 139e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_EXPOSE_GLOBALS_IMPLEMENTATION) 140e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 141e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (__GNUC__) || defined (__BORLANDC__) 142e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_ADDITIONAL_OPEN_BRACKET { 143e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_ADDITIONAL_CLOSE_BRACKET } 144e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# else 145e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_ADDITIONAL_OPEN_BRACKET 146e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_ADDITIONAL_CLOSE_BRACKET 147e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 148e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 149e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* The following code has been extracted from the boost libraries (www.boost.org) and 150e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * adapted with the STLport portability macros. Advantage on previous technique is that 151e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * computation of infinity and NaN values is only based on big/little endianess, compiler 152e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * float, double or long double representation is taken into account thanks to the sizeof 153e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * operator. */ 154e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate<class _Number, unsigned short _Word> 155e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct float_helper { 156e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott union _WordsNumber { 157e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott unsigned short _Words[8]; 158e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _Number _num; 159e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott }; 160e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott static _Number get_word_higher() _STLP_NOTHROW { 161e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _WordsNumber __tmp = { _STLP_ADDITIONAL_OPEN_BRACKET _Word, 0, 0, 0, 0, 0, 0, 0 _STLP_ADDITIONAL_CLOSE_BRACKET }; 162e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return __tmp._num; 163e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 164e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott static _Number get_word_lower() _STLP_NOTHROW { 165e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _WordsNumber __tmp = { _STLP_ADDITIONAL_OPEN_BRACKET 0, 0, 0, 0, 0, 0, 0, 0 _STLP_ADDITIONAL_CLOSE_BRACKET }; 166e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott __tmp._Words[(sizeof(_Number) >= 12 ? 10 : sizeof(_Number)) / sizeof(unsigned short) - 1] = _Word; 167e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return __tmp._num; 168e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 169e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott static _Number get_from_last_word() _STLP_NOTHROW { 170e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_BIG_ENDIAN) 171e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return get_word_higher(); 172e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# else /* _STLP_LITTLE_ENDIAN */ 173e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return get_word_lower(); 174e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 175e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 176e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott static _Number get_from_first_word() _STLP_NOTHROW { 177e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_BIG_ENDIAN) 178e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return get_word_lower(); 179e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# else /* _STLP_LITTLE_ENDIAN */ 180e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return get_word_higher(); 181e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 182e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 183e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}; 184e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 185e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if !defined (_STLP_NO_LONG_DOUBLE) && !defined (_STLP_BIG_ENDIAN) 186e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate<class _Number, unsigned short _Word1, unsigned short _Word2> 187e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstruct float_helper2 { 188e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott union _WordsNumber { 189e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott unsigned short _Words[8]; 190e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _Number _num; 191e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott }; 192e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //static _Number get_word_higher() _STLP_NOTHROW { 193e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // _WordsNumber __tmp = { _STLP_ADDITIONAL_OPEN_BRACKET _Word1, _Word2, 0, 0, 0, 0, 0, 0 _STLP_ADDITIONAL_CLOSE_BRACKET }; 194e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // return __tmp._num; 195e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott //} 196e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott static _Number get_word_lower() _STLP_NOTHROW { 197e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _WordsNumber __tmp = { _STLP_ADDITIONAL_OPEN_BRACKET 0, 0, 0, 0, 0, 0, 0, 0 _STLP_ADDITIONAL_CLOSE_BRACKET }; 198e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott __tmp._Words[(sizeof(_Number) >= 12 ? 10 : sizeof(_Number)) / sizeof(unsigned short) - 2] = _Word1; 199e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott __tmp._Words[(sizeof(_Number) >= 12 ? 10 : sizeof(_Number)) / sizeof(unsigned short) - 1] = _Word2; 200e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return __tmp._num; 201e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 202e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott static _Number get_from_last_word() _STLP_NOTHROW { 203e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//# if defined (_STLP_BIG_ENDIAN) 204e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// return get_word_higher(); 205e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//# else /* _STLP_LITTLE_ENDIAN */ 206e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return get_word_lower(); 207e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//# endif 208e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 209e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}; 210e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 211e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 212e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/* Former values kept in case moving to boost code has introduce a regression on 213e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * some platform. */ 214e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if 0 215e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_BIG_ENDIAN) 216e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (__OS400__) 217e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_FLOAT_INF_REP { 0x7f80, 0 } 218e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_FLOAT_QNAN_REP { 0xffc0, 0 } 219e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_FLOAT_SNAN_REP { 0xff80, 0 } 220e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_DOUBLE_INF_REP { 0x7ff0, 0, 0, 0 } 221e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_DOUBLE_QNAN_REP { 0xfff8, 0, 0, 0 } 222e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_DOUBLE_SNAN_REP { 0xfff0, 0, 0, 0 } 223e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_LDOUBLE_INF_REP { 0x7ff0, 0, 0, 0, 0, 0, 0, 0 } 224e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_LDOUBLE_QNAN_REP { 0xfff8, 0, 0, 0, 0, 0, 0, 0 } 225e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_LDOUBLE_SNAN_REP { 0xfff0, 0, 0, 0, 0, 0, 0, 0 } 226e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# else /* __OS400__ */ 227e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_FLOAT_INF_REP { 0x7f80, 0 } 228e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_FLOAT_QNAN_REP { 0x7fc1, 0 } 229e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_FLOAT_SNAN_REP { 0x7f81, 0 } 230e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_DOUBLE_INF_REP { 0x7ff0, 0, 0, 0 } 231e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_DOUBLE_QNAN_REP { 0x7ff9, 0, 0, 0 } 232e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_DOUBLE_SNAN_REP { 0x7ff1, 0, 0, 0 } 233e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_LDOUBLE_INF_REP { 0x7ff0, 0, 0, 0, 0, 0, 0, 0 } 234e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_LDOUBLE_QNAN_REP { 0x7ff1, 0, 0, 0, 0, 0, 0, 0 } 235e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_LDOUBLE_SNAN_REP { 0x7ff9, 0, 0, 0, 0, 0, 0, 0 } 236e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif /* __OS400__ */ 237e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# else /* _STLP_LITTLE_ENDIAN */ 238e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined(__DECCXX) 239e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_FLOAT_INF_REP { 0, 0x7f80 } 240e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_FLOAT_QNAN_REP { 0, 0xffc0 } 241e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_FLOAT_SNAN_REP { 0x5555, 0x7f85 } 242e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_DOUBLE_INF_REP { 0, 0, 0, 0x7ff0 } 243e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_DOUBLE_QNAN_REP { 0, 0, 0, 0xfff8 } 244e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_DOUBLE_SNAN_REP { 0x5555, 0x5555, 0x5555, 0x7ff5 } 245e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_LDOUBLE_INF_REP { 0, 0, 0, 0, 0, 0, 0, 0x7fff } 246e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_LDOUBLE_QNAN_REP { 0, 0, 0, 0, 0, 0, 0x8000, 0xffff } 247e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_LDOUBLE_SNAN_REP { 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x7fff} 248e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# else 249e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_FLOAT_INF_REP { 0, 0x7f80 } 250e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_FLOAT_QNAN_REP { 0, 0x7fc0 } 251e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_FLOAT_SNAN_REP { 0, 0x7fa0 } 252e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_DOUBLE_INF_REP { 0, 0, 0, 0x7ff0 } 253e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_DOUBLE_QNAN_REP { 0, 0, 0, 0x7ff8 } 254e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_DOUBLE_SNAN_REP { 0, 0, 0, 0x7ff4 } 255e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_MSVC) || defined (__ICL) 256e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_LDOUBLE_INF_REP { 0, 0, 0, 0x7FF0, 0 } 257e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_LDOUBLE_QNAN_REP { 0, 0, 0, 0xFFF8, 0 } 258e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_LDOUBLE_SNAN_REP { 0, 0, 0, 0xFFF8, 0 } 259e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# elif defined (__BORLANDC__) 260e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_LDOUBLE_INF_REP { 0, 0, 0, 0x8000, 0x7fff } 261e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_LDOUBLE_QNAN_REP { 0, 0, 0, 0xc000, 0x7fff } 262e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_LDOUBLE_SNAN_REP { 0, 0, 0, 0xa000, 0x7fff } 263e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# else 264e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_LDOUBLE_INF_REP { 0, 0, 0, 0x8000, 0x7fff, 0 } 265e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_LDOUBLE_QNAN_REP { 0, 0, 0, 0xa000, 0x7fff, 0 } 266e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_LDOUBLE_SNAN_REP { 0, 0, 0, 0xc000, 0x7fff, 0 } 267e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 268e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 269e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 270e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 271e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottunion _F_rep { 272e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott unsigned short rep[2]; 273e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott float val; 274e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}; 275e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottunion _D_rep { 276e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott unsigned short rep[4]; 277e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott double val; 278e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}; 279e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 280e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# ifndef _STLP_NO_LONG_DOUBLE 281e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottunion _LD_rep { 282e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott unsigned short rep[8]; 283e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott long double val; 284e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}; 285e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 286e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 287e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 288e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class __dummy> 289e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottfloat _STLP_CALL _LimG<__dummy>::get_F_inf() { 290e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef float_helper<float, 0x7f80u> _FloatHelper; 291e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _FloatHelper::get_from_last_word(); 292e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 293e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class __dummy> 294e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottfloat _STLP_CALL _LimG<__dummy>::get_F_qNaN() { 295e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef float_helper<float, 0x7f81u> _FloatHelper; 296e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _FloatHelper::get_from_last_word(); 297e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 298e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class __dummy> 299e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottfloat _STLP_CALL _LimG<__dummy>::get_F_sNaN() { 300e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef float_helper<float, 0x7fc1u> _FloatHelper; 301e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _FloatHelper::get_from_last_word(); 302e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 303e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class __dummy> 304e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottfloat _STLP_CALL _LimG<__dummy>::get_F_denormMin() { 305e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef float_helper<float, 0x0001u> _FloatHelper; 306e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _FloatHelper::get_from_first_word(); 307e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 308e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 309e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <int __use_double_limits> 310e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass _NumericLimitsAccess; 311e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 312e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_TEMPLATE_NULL 313e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass _NumericLimitsAccess<1> { 314e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottpublic: 315e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott static double get_inf() { 316e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef float_helper<double, 0x7ff0u> _FloatHelper; 317e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _FloatHelper::get_from_last_word(); 318e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 319e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott static double get_qNaN() { 320e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef float_helper<double, 0x7ff1u> _FloatHelper; 321e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _FloatHelper::get_from_last_word(); 322e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 323e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott static double get_sNaN() { 324e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef float_helper<double, 0x7ff9u> _FloatHelper; 325e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _FloatHelper::get_from_last_word(); 326e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 327e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}; 328e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 329e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class __dummy> 330e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottdouble _STLP_CALL _LimG<__dummy>::get_D_inf() 331e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _NumericLimitsAccess<1>::get_inf(); } 332e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class __dummy> 333e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottdouble _STLP_CALL _LimG<__dummy>::get_D_qNaN() 334e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _NumericLimitsAccess<1>::get_qNaN(); } 335e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class __dummy> 336e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottdouble _STLP_CALL _LimG<__dummy>::get_D_sNaN() 337e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _NumericLimitsAccess<1>::get_sNaN(); } 338e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class __dummy> 339e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottdouble _STLP_CALL _LimG<__dummy>::get_D_denormMin() { 340e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef float_helper<double, 0x0001u> _FloatHelper; 341e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _FloatHelper::get_from_first_word(); 342e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 343e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 344e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if !defined (_STLP_NO_LONG_DOUBLE) 345e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_TEMPLATE_NULL 346e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass _NumericLimitsAccess<0> { 347e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottpublic: 348e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott static long double get_inf() { 349e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_BIG_ENDIAN) 350e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef float_helper<long double, 0x7ff0u> _FloatHelper; 351e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# else 352e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef float_helper2<long double, 0x8000u, 0x7fffu> _FloatHelper; 353e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 354e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _FloatHelper::get_from_last_word(); 355e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 356e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott static long double get_qNaN() { 357e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_BIG_ENDIAN) 358e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef float_helper<long double, 0x7ff1u> _FloatHelper; 359e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# else 360e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef float_helper2<long double, 0xc000u, 0x7fffu> _FloatHelper; 361e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 362e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _FloatHelper::get_from_last_word(); 363e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 364e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott static long double get_sNaN() { 365e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_BIG_ENDIAN) 366e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef float_helper<long double, 0x7ff9u> _FloatHelper; 367e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# else 368e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef float_helper2<long double, 0x9000u, 0x7fffu> _FloatHelper; 369e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 370e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _FloatHelper::get_from_last_word(); 371e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 372e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}; 373e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 374e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class __dummy> 375e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottlong double _STLP_CALL _LimG<__dummy>::get_LD_inf() { 376e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const int __use_double_limits = sizeof(double) == sizeof(long double) ? 1 : 0; 377e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _NumericLimitsAccess<__use_double_limits>::get_inf(); 378e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 379e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class __dummy> 380e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottlong double _STLP_CALL _LimG<__dummy>::get_LD_qNaN() { 381e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const int __use_double_limits = sizeof(double) == sizeof(long double) ? 1 : 0; 382e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _NumericLimitsAccess<__use_double_limits>::get_qNaN(); 383e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 384e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class __dummy> 385e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottlong double _STLP_CALL _LimG<__dummy>::get_LD_sNaN() { 386e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const int __use_double_limits = sizeof(double) == sizeof(long double) ? 1 : 0; 387e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _NumericLimitsAccess<__use_double_limits>::get_sNaN(); 388e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 389e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class __dummy> 390e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottlong double _STLP_CALL _LimG<__dummy>::get_LD_denormMin() { 391e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef float_helper<long double, 0x0001u> _FloatHelper; 392e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _FloatHelper::get_from_first_word(); 393e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 394e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 395e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 396e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif /* _STLP_EXPOSE_GLOBALS_IMPLEMENTATION */ 397e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 398e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#undef _STLP_LIMITS_MIN_TYPE 399e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#undef _STLP_LIMITS_MAX_TYPE 400e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 401e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_MOVE_TO_STD_NAMESPACE 402e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 403e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_END_NAMESPACE 404e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 405e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif /* _STLP_LIMITS_C_INCLUDED */ 406