diff -r e1b950c65cb4 -r 837f303aceeb epoc32/include/stdapis/stlportv5/stl/_limits.c --- a/epoc32/include/stdapis/stlportv5/stl/_limits.c Wed Mar 31 12:27:01 2010 +0100 +++ b/epoc32/include/stdapis/stlportv5/stl/_limits.c Wed Mar 31 12:33:34 2010 +0100 @@ -2,13 +2,13 @@ * Copyright (c) 1998,1999 * Silicon Graphics Computer Systems, Inc. * - * Copyright (c) 1999 + * Copyright (c) 1999 * Boris Fomitchev * * This material is provided "as is", with absolutely no warranty expressed * or implied. Any use is at your own risk. * - * Permission to use or copy this software for any purpose is hereby granted + * Permission to use or copy this software for any purpose is hereby granted * without fee, provided the above notices are retained on all copies. * Permission to modify the code and to distribute modified code is granted, * provided the above notices are retained, and a notice that the code was @@ -16,11 +16,11 @@ * */ -# if !defined (_STLP_LIMITS_C) -# define _STLP_LIMITS_C +#ifndef _STLP_LIMITS_C +#define _STLP_LIMITS_C -#ifndef _STLP_INTERNAL_LIMITS_H -# include +#ifndef _STLP_INTERNAL_LIMITS +# include #endif //========================================================== @@ -29,9 +29,11 @@ _STLP_BEGIN_NAMESPACE -# if ! defined ( _STLP_STATIC_CONST_INIT_BUG) +_STLP_MOVE_TO_PRIV_NAMESPACE -# define __declare_numeric_base_member(__type, __mem, _Init) \ +#if !defined (_STLP_STATIC_CONST_INIT_BUG) + +# define __declare_numeric_base_member(__type, __mem, _Init) \ template \ const __type _Numeric_limits_base<__number>:: __mem @@ -58,15 +60,15 @@ __declare_numeric_base_member(bool, tinyness_before, false); __declare_numeric_base_member(float_round_style, round_style, round_toward_zero); -# undef __declare_numeric_base_member +# undef __declare_numeric_base_member -# define __declare_integer_limits_member(__type, __mem, _Init) \ +# define __declare_integer_limits_member(__type, __mem, _Init) \ template \ const __type _Integer_limits<_Int, __imin, __imax, __idigits, __ismod>:: __mem __declare_integer_limits_member(bool, is_specialized, true); __declare_integer_limits_member(int, digits, (__idigits < 0) ? \ - ((int)((sizeof(_Int) * (CHAR_BIT))) - ((__imin == 0) ? 0 : 1)) \ + ((int)((sizeof(_Int) * (CHAR_BIT))) - ((__imin == 0) ? 0 : 1)) \ : (__idigits) ); __declare_integer_limits_member(int, digits10, (int)(301UL * digits) /1000); __declare_integer_limits_member(bool, is_signed, __imin != 0); @@ -75,8 +77,9 @@ __declare_integer_limits_member(int, radix, 2); __declare_integer_limits_member(bool, is_bounded, true); __declare_integer_limits_member(bool, is_modulo, true); +# undef __declare_integer_limits_member -# define __declare_float_limits_member(__type, __mem, _Init) \ +# define __declare_float_limits_member(__type, __mem, _Init) \ template ::\ __mem -__declare_float_limits_member(bool, is_specialized, true); -__declare_float_limits_member(int, digits, __Digits); -__declare_float_limits_member(int, digits10, __Digits10); -__declare_float_limits_member(bool, is_signed, true); -__declare_float_limits_member(int, radix, FLT_RADIX); -__declare_float_limits_member(int, min_exponent, __MinExp); -__declare_float_limits_member(int, max_exponent, __MaxExp); -__declare_float_limits_member(int, min_exponent10, __MinExp10); -__declare_float_limits_member(int, max_exponent10, __MaxExp10); +__declare_float_limits_member(bool, is_specialized, true); +__declare_float_limits_member(int, digits, __Digits); +__declare_float_limits_member(int, digits10, __Digits10); +__declare_float_limits_member(bool, is_signed, true); +__declare_float_limits_member(int, radix, FLT_RADIX); +__declare_float_limits_member(int, min_exponent, __MinExp); +__declare_float_limits_member(int, max_exponent, __MaxExp); +__declare_float_limits_member(int, min_exponent10, __MinExp10); +__declare_float_limits_member(int, max_exponent10, __MaxExp10); __declare_float_limits_member(bool, has_infinity, true); __declare_float_limits_member(bool, has_quiet_NaN, true); __declare_float_limits_member(bool, has_signaling_NaN, true); @@ -107,164 +110,206 @@ __declare_float_limits_member(bool, traps, true); __declare_float_limits_member(bool, tinyness_before, false); __declare_float_limits_member(float_round_style, round_style, __RoundStyle); +# undef __declare_float_limits_member -# endif /* _STLP_STATIC_CONST_INIT_BUG */ +#endif /* _STLP_STATIC_CONST_INIT_BUG */ -# ifdef _STLP_EXPOSE_GLOBALS_IMPLEMENTATION +#if defined (_STLP_EXPOSE_GLOBALS_IMPLEMENTATION) -# if defined(_STLP_BIG_ENDIAN) -# if defined(__OS400__) -# define _STLP_FLOAT_INF_REP { 0x7f80, 0 } -# define _STLP_FLOAT_QNAN_REP { 0xffc0, 0 } -# define _STLP_FLOAT_SNAN_REP { 0xff80, 0 } -# define _STLP_DOUBLE_INF_REP { 0x7ff0, 0, 0, 0 } -# define _STLP_DOUBLE_QNAN_REP { 0xfff8, 0, 0, 0 } -# define _STLP_DOUBLE_SNAN_REP { 0xfff0, 0, 0, 0 } -# define _STLP_LDOUBLE_INF_REP { 0x7ff0, 0, 0, 0, 0, 0, 0, 0 } -# define _STLP_LDOUBLE_QNAN_REP { 0xfff8, 0, 0, 0, 0, 0, 0, 0 } -# define _STLP_LDOUBLE_SNAN_REP { 0xfff0, 0, 0, 0, 0, 0, 0, 0 } -# else -# define _STLP_FLOAT_INF_REP { 0x7f80, 0 } -# define _STLP_FLOAT_SNAN_REP { 0x7f81, 0 } -# define _STLP_FLOAT_QNAN_REP { 0x7fc1, 0 } -# define _STLP_DOUBLE_INF_REP { 0x7ff0, 0, 0, 0 } -# define _STLP_DOUBLE_QNAN_REP { 0x7ff1, 0, 0, 0 } -# define _STLP_DOUBLE_SNAN_REP { 0x7ff9, 0, 0, 0 } -# define _STLP_LDOUBLE_INF_REP { 0x7ff0, 0, 0, 0, 0, 0, 0, 0 } -# define _STLP_LDOUBLE_SNAN_REP { 0x7ff1, 0, 0, 0, 0, 0, 0, 0 } -# define _STLP_LDOUBLE_QNAN_REP { 0x7ff9, 0, 0, 0, 0, 0, 0, 0 } -# endif +# if defined (_STLP_BIG_ENDIAN) +# if defined (__OS400__) +# define _STLP_FLOAT_INF_REP { 0x7f80, 0 } +# define _STLP_FLOAT_QNAN_REP { 0xffc0, 0 } +# define _STLP_FLOAT_SNAN_REP { 0xff80, 0 } +# define _STLP_DOUBLE_INF_REP { 0x7ff0, 0, 0, 0 } +# define _STLP_DOUBLE_QNAN_REP { 0xfff8, 0, 0, 0 } +# define _STLP_DOUBLE_SNAN_REP { 0xfff0, 0, 0, 0 } +# define _STLP_LDOUBLE_INF_REP { 0x7ff0, 0, 0, 0, 0, 0, 0, 0 } +# define _STLP_LDOUBLE_QNAN_REP { 0xfff8, 0, 0, 0, 0, 0, 0, 0 } +# define _STLP_LDOUBLE_SNAN_REP { 0xfff0, 0, 0, 0, 0, 0, 0, 0 } +# else /* __OS400__ */ +# define _STLP_FLOAT_INF_REP { 0x7f80, 0 } +# define _STLP_FLOAT_QNAN_REP { 0x7fc1, 0 } +# define _STLP_FLOAT_SNAN_REP { 0x7f81, 0 } +# define _STLP_DOUBLE_INF_REP { 0x7ff0, 0, 0, 0 } +# define _STLP_DOUBLE_QNAN_REP { 0x7ff9, 0, 0, 0 } +# define _STLP_DOUBLE_SNAN_REP { 0x7ff1, 0, 0, 0 } +# define _STLP_LDOUBLE_INF_REP { 0x7ff0, 0, 0, 0, 0, 0, 0, 0 } +# define _STLP_LDOUBLE_QNAN_REP { 0x7ff1, 0, 0, 0, 0, 0, 0, 0 } +# define _STLP_LDOUBLE_SNAN_REP { 0x7ff9, 0, 0, 0, 0, 0, 0, 0 } +# endif /* __OS400__ */ -# elif defined (_STLP_LITTLE_ENDIAN) +# elif defined (_STLP_LITTLE_ENDIAN) -# if 0 /* defined(_STLP_MSVC) || defined(__linux__) */ -// some IA-32 platform ?? -# define _STLP_FLOAT_INF_REP { 0, 0x7f80 } -# define _STLP_FLOAT_QNAN_REP { 0, 0xffc0 } -# define _STLP_FLOAT_SNAN_REP { 0, 0xff80 } +# if 0 /* defined(_STLP_MSVC) || defined(__linux__) */ +// some IA-32 platform ?? +/* +# define _STLP_FLOAT_INF_REP { 0, 0x7f80 } +# define _STLP_FLOAT_QNAN_REP { 0, 0xffc0 } +# define _STLP_FLOAT_SNAN_REP { 0, 0xff80 } -# define _STLP_DOUBLE_INF_REP { 0, 0, 0, 0x7ff0 } -# define _STLP_DOUBLE_QNAN_REP { 0, 0, 0, 0xfff8 } -# define _STLP_DOUBLE_SNAN_REP { 0, 0, 0, 0xfff0 } -# define _STLP_LDOUBLE_INF_REP { 0, 0, 0, 0x7FF0, 0 } // ???? -# define _STLP_LDOUBLE_QNAN_REP { 0, 0, 0, 0xFFF8, 0 } // ???? -# define _STLP_LDOUBLE_SNAN_REP { 0, 0, 0, 0xFFF0, 0 } // ???? +# define _STLP_DOUBLE_INF_REP { 0, 0, 0, 0x7ff0 } +# define _STLP_DOUBLE_QNAN_REP { 0, 0, 0, 0xfff8 } +# define _STLP_DOUBLE_SNAN_REP { 0, 0, 0, 0xfff0 } +# define _STLP_LDOUBLE_INF_REP { 0, 0, 0, 0x7FF0, 0 } // ???? +# define _STLP_LDOUBLE_QNAN_REP { 0, 0, 0, 0xFFF8, 0 } // ???? +# define _STLP_LDOUBLE_SNAN_REP { 0, 0, 0, 0xFFF0, 0 } // ???? +*/ +# elif defined(__DECCXX) -# elif defined(__DECCXX) +# define _STLP_FLOAT_INF_REP { 0, 0x7f80 } +# define _STLP_FLOAT_QNAN_REP { 0, 0xffc0 } +# define _STLP_FLOAT_SNAN_REP { 0x5555, 0x7f85 } -# define _STLP_FLOAT_INF_REP { 0, 0x7f80 } -# define _STLP_FLOAT_QNAN_REP { 0, 0xffc0 } -# define _STLP_FLOAT_SNAN_REP { 0x5555, 0x7f85 } +# define _STLP_DOUBLE_INF_REP { 0, 0, 0, 0x7ff0 } +# define _STLP_DOUBLE_QNAN_REP { 0, 0, 0, 0xfff8 } +# define _STLP_DOUBLE_SNAN_REP { 0x5555, 0x5555, 0x5555, 0x7ff5 } -# define _STLP_DOUBLE_INF_REP { 0, 0, 0, 0x7ff0 } -# define _STLP_DOUBLE_QNAN_REP { 0, 0, 0, 0xfff8 } -# define _STLP_DOUBLE_SNAN_REP { 0x5555, 0x5555, 0x5555, 0x7ff5 } - -# define _STLP_LDOUBLE_INF_REP { 0, 0, 0, 0, 0, 0, 0, 0x7fff } -# define _STLP_LDOUBLE_QNAN_REP { 0, 0, 0, 0, 0, 0, 0x8000, 0xffff } -# define _STLP_LDOUBLE_SNAN_REP { 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x7fff} -# else -# define _STLP_FLOAT_INF_REP { 0, 0x7f80 } -# define _STLP_FLOAT_QNAN_REP { 0, 0x7fa0 } -# define _STLP_FLOAT_SNAN_REP { 0, 0x7fc0 } -# define _STLP_DOUBLE_INF_REP { 0, 0, 0, 0x7ff0 } -# define _STLP_DOUBLE_QNAN_REP { 0, 0, 0, 0x7ff4 } -# define _STLP_DOUBLE_SNAN_REP { 0, 0, 0, 0x7ff8 } -# if defined (_STLP_MSVC) || defined (__ICL) || defined (__BORLANDC__) -# define _STLP_LDOUBLE_INF_REP { 0, 0, 0, 0x7FF0, 0 } // ???? -# define _STLP_LDOUBLE_QNAN_REP { 0, 0, 0, 0xFFF8, 0 } // ???? -# define _STLP_LDOUBLE_SNAN_REP { 0, 0, 0, 0xFFF8, 0 } +# define _STLP_LDOUBLE_INF_REP { 0, 0, 0, 0, 0, 0, 0, 0x7fff } +# define _STLP_LDOUBLE_QNAN_REP { 0, 0, 0, 0, 0, 0, 0x8000, 0xffff } +# define _STLP_LDOUBLE_SNAN_REP { 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x7fff} +# else +# define _STLP_FLOAT_INF_REP { 0, 0x7f80 } +# define _STLP_FLOAT_QNAN_REP { 0, 0x7fC0 } +# define _STLP_FLOAT_SNAN_REP { 0x0001, 0x7f80 } +# define _STLP_DOUBLE_INF_REP { 0, 0, 0, 0x7ff0 } +# define _STLP_DOUBLE_QNAN_REP { 0, 0, 0, 0x7ff8 } +# define _STLP_DOUBLE_SNAN_REP { 0x0001, 0, 0, 0x7ff0 } +# if defined (_STLP_MSVC) || defined (__ICL) +# define _STLP_LDOUBLE_INF_REP { 0, 0, 0, 0x7FF0, 0 } +# define _STLP_LDOUBLE_QNAN_REP { 0, 0, 0, 0xFFF8, 0 } +# define _STLP_LDOUBLE_SNAN_REP { 0, 0, 0, 0xFFF8, 0 } +# elif defined (__BORLANDC__) +# define _STLP_LDOUBLE_INF_REP { 0, 0, 0, 0x8000, 0x7fff } +# define _STLP_LDOUBLE_QNAN_REP { 0, 0, 0, 0xc000, 0x7fff } +# define _STLP_LDOUBLE_SNAN_REP { 0, 0, 0, 0xa000, 0x7fff } +# else +# define _STLP_LDOUBLE_INF_REP { 0, 0, 0, 0x8000, 0x7fff, 0 } +# define _STLP_LDOUBLE_QNAN_REP { 0, 0, 0, 0xa000, 0x7fff, 0 } +# define _STLP_LDOUBLE_SNAN_REP { 0, 0, 0, 0xc000, 0x7fff, 0 } +# endif +# endif # else -# define _STLP_LDOUBLE_INF_REP { 0, 0, 0, 0x8000, 0x7fff } -# define _STLP_LDOUBLE_QNAN_REP { 0, 0, 0, 0xa000, 0x7fff } -# define _STLP_LDOUBLE_SNAN_REP { 0, 0, 0, 0xc000, 0x7fff } -# endif -# endif -#else /* This is an architecture we don't know how to handle. Return some obviously wrong values. */ -# define _STLP_FLOAT_INF_REP { 0, 0 } -# define _STLP_FLOAT_QNAN_REP { 0, 0 } -# define _STLP_FLOAT_SNAN_REP { 0, 0 } -# define _STLP_DOUBLE_INF_REP { 0, 0 } -# define _STLP_DOUBLE_QNAN_REP { 0, 0 } -# define _STLP_DOUBLE_SNAN_REP { 0, 0 } -# define _STLP_LDOUBLE_INF_REP { 0 } -# define _STLP_LDOUBLE_QNAN_REP { 0 } -# define _STLP_LDOUBLE_SNAN_REP { 0 } +# define _STLP_FLOAT_INF_REP { 0, 0 } +# define _STLP_FLOAT_QNAN_REP { 0, 0 } +# define _STLP_FLOAT_SNAN_REP { 0, 0 } +# define _STLP_DOUBLE_INF_REP { 0, 0 } +# define _STLP_DOUBLE_QNAN_REP { 0, 0 } +# define _STLP_DOUBLE_SNAN_REP { 0, 0 } +# define _STLP_LDOUBLE_INF_REP { 0 } +# define _STLP_LDOUBLE_QNAN_REP { 0 } +# define _STLP_LDOUBLE_SNAN_REP { 0 } -#endif +# endif -#if ( _STLP_STATIC_TEMPLATE_DATA > 0 ) -# ifndef _STLP_NO_LONG_DOUBLE +# if 0 +/* +# if defined(_STLP_BIG_ENDIAN) + +# elif defined (_STLP_LITTLE_ENDIAN) +# else + +//This is an architecture we don't know how to handle. Return some +//obviously wrong values. +# define _STLP_FLOAT_INF_REP { 0, 0 } +# define _STLP_FLOAT_QNAN_REP { 0, 0 } +# define _STLP_FLOAT_SNAN_REP { 0, 0 } +# define _STLP_DOUBLE_INF_REP { 0, 0 } +# define _STLP_DOUBLE_QNAN_REP { 0, 0 } +# define _STLP_DOUBLE_SNAN_REP { 0, 0 } +# define _STLP_LDOUBLE_INF_REP { 0 } +# define _STLP_LDOUBLE_QNAN_REP { 0 } +# define _STLP_LDOUBLE_SNAN_REP { 0 } +# endif +*/ +# endif + +union _F_rep { + unsigned short rep[2]; + float val; +}; +union _D_rep { + unsigned short rep[4]; + double val; +}; + +# ifndef _STLP_NO_LONG_DOUBLE +union _LD_rep { + unsigned short rep[8]; + long double val; +}; +# endif + template -const _L_rep _LimG<__dummy>::_L_inf = {_STLP_LDOUBLE_INF_REP}; +float _STLP_CALL _LimG<__dummy>::get_F_inf() { + _F_rep _F_inf = {_STLP_FLOAT_INF_REP}; + return _F_inf.val; +} template -const _L_rep _LimG<__dummy>::_L_qNaN = {_STLP_LDOUBLE_QNAN_REP}; +float _STLP_CALL _LimG<__dummy>::get_F_qNaN() { + _F_rep _F_qNaN = {_STLP_FLOAT_QNAN_REP}; + return _F_qNaN.val; +} template -const _L_rep _LimG<__dummy>::_L_sNaN = {_STLP_LDOUBLE_SNAN_REP}; -# endif +float _STLP_CALL _LimG<__dummy>::get_F_sNaN() { + _F_rep _F_sNaN = {_STLP_FLOAT_SNAN_REP}; + return _F_sNaN.val; +} + template -const _D_rep _LimG<__dummy>::_D_inf = {_STLP_DOUBLE_INF_REP}; +double _STLP_CALL _LimG<__dummy>::get_D_inf() { + _D_rep _D_inf = {_STLP_DOUBLE_INF_REP}; + return _D_inf.val; +} template -const _D_rep _LimG<__dummy>::_D_qNaN = {_STLP_DOUBLE_QNAN_REP}; +double _STLP_CALL _LimG<__dummy>::get_D_qNaN() { + _D_rep _D_qNaN = {_STLP_DOUBLE_QNAN_REP}; + return _D_qNaN.val; +} template -const _D_rep _LimG<__dummy>::_D_sNaN = {_STLP_DOUBLE_SNAN_REP}; +double _STLP_CALL _LimG<__dummy>::get_D_sNaN() { + _D_rep _D_sNaN = {_STLP_DOUBLE_SNAN_REP}; + return _D_sNaN.val; +} + +# if !defined (_STLP_NO_LONG_DOUBLE) template -const _F_rep _LimG<__dummy>::_F_inf = {_STLP_FLOAT_INF_REP}; +long double _STLP_CALL _LimG<__dummy>::get_LD_inf() { + _LD_rep _LD_inf = {_STLP_LDOUBLE_INF_REP}; + return _LD_inf.val; +} template -const _F_rep _LimG<__dummy>::_F_qNaN = {_STLP_FLOAT_QNAN_REP}; +long double _STLP_CALL _LimG<__dummy>::get_LD_qNaN() { + _LD_rep _LD_qNaN = {_STLP_LDOUBLE_QNAN_REP}; + return _LD_qNaN.val; +} template -const _F_rep _LimG<__dummy>::_F_sNaN = {_STLP_FLOAT_SNAN_REP}; +long double _STLP_CALL _LimG<__dummy>::get_LD_sNaN() { + _LD_rep _LD_sNaN = {_STLP_LDOUBLE_SNAN_REP}; + return _LD_sNaN.val; +} +# endif /* _STLP_NO_LONG_DOUBLE */ -#else +#endif /* _STLP_EXPOSE_GLOBALS_IMPLEMENTATION */ -__DECLARE_INSTANCE( const _F_rep, - _LimG::_F_inf, = _STLP_FLOAT_INF_REP); -__DECLARE_INSTANCE( const _F_rep, - _LimG::_F_qNaN, = _STLP_FLOAT_QNAN_REP); -__DECLARE_INSTANCE( const _F_rep, - _LimG::_F_sNaN, = _STLP_FLOAT_SNAN_REP); -__DECLARE_INSTANCE( const _D_rep, - _LimG::_D_inf, = _STLP_DOUBLE_INF_REP); -__DECLARE_INSTANCE( const _D_rep, - _LimG::_D_qNaN, = _STLP_DOUBLE_QNAN_REP); -__DECLARE_INSTANCE( const _D_rep, - _LimG::_D_sNaN, = _STLP_DOUBLE_SNAN_REP); -# ifndef _STLP_NO_LONG_DOUBLE -__DECLARE_INSTANCE( const _L_rep, - _LimG::_L_inf, = _STLP_LDOUBLE_INF_REP); -__DECLARE_INSTANCE( const _L_rep, - _LimG::_L_qNaN, = _STLP_LDOUBLE_QNAN_REP); -__DECLARE_INSTANCE( const _L_rep, - _LimG::_L_sNaN, = _STLP_LDOUBLE_SNAN_REP); -# endif +#undef _STLP_LIMITS_MIN_TYPE +#undef _STLP_LIMITS_MAX_TYPE -#endif /* STATIC_DATA */ +#undef _STLP_FLOAT_INF_REP +#undef _STLP_FLOAT_QNAN_REP +#undef _STLP_FLOAT_SNAN_REP +#undef _STLP_DOUBLE_INF_REP +#undef _STLP_DOUBLE_QNAN_REP +#undef _STLP_DOUBLE_SNAN_REP +#undef _STLP_LDOUBLE_INF_REP +#undef _STLP_LDOUBLE_QNAN_REP +#undef _STLP_LDOUBLE_SNAN_REP -# endif /* _STLP_EXPOSE_GLOBALS_IMPLEMENTATION */ - -# undef __declare_integer_limits_member -# undef __declare_float_limits_member -# undef __HACK_ILIMITS -# undef __HACK_NOTHING -# undef __declare_int_members -# undef __declare_float_members -# undef _STLP_LIMITS_MIN_TYPE -# undef _STLP_LIMITS_MAX_TYPE - -# undef _STLP_FLOAT_INF_REP -# undef _STLP_FLOAT_QNAN_REP -# undef _STLP_FLOAT_SNAN_REP -# undef _STLP_DOUBLE_INF_REP -# undef _STLP_DOUBLE_QNAN_REP -# undef _STLP_DOUBLE_SNAN_REP -# undef _STLP_LDOUBLE_INF_REP -# undef _STLP_LDOUBLE_QNAN_REP -# undef _STLP_LDOUBLE_SNAN_REP +_STLP_MOVE_TO_STD_NAMESPACE _STLP_END_NAMESPACE - #endif /* _STLP_LIMITS_C_INCLUDED */