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