epoc32/include/stdapis/stlport/stl/_limits.c
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
williamr@4
     1
/*
williamr@4
     2
 * Copyright (c) 1998,1999
williamr@4
     3
 * Silicon Graphics Computer Systems, Inc.
williamr@4
     4
 *
williamr@4
     5
 * Copyright (c) 1999 
williamr@4
     6
 * Boris Fomitchev
williamr@4
     7
 *
williamr@4
     8
 * This material is provided "as is", with absolutely no warranty expressed
williamr@4
     9
 * or implied. Any use is at your own risk.
williamr@4
    10
 *
williamr@4
    11
 * Permission to use or copy this software for any purpose is hereby granted 
williamr@4
    12
 * without fee, provided the above notices are retained on all copies.
williamr@4
    13
 * Permission to modify the code and to distribute modified code is granted,
williamr@4
    14
 * provided the above notices are retained, and a notice that the code was
williamr@4
    15
 * modified is included with the above copyright notice.
williamr@4
    16
 *
williamr@4
    17
 */
williamr@4
    18
williamr@4
    19
# if !defined (_STLP_LIMITS_C)
williamr@4
    20
#  define _STLP_LIMITS_C
williamr@4
    21
williamr@4
    22
#ifndef _STLP_INTERNAL_LIMITS_H
williamr@4
    23
# include <stl/_limits.h>
williamr@4
    24
#endif
williamr@4
    25
williamr@4
    26
//==========================================================
williamr@4
    27
//  numeric_limits static members
williamr@4
    28
//==========================================================
williamr@4
    29
williamr@4
    30
_STLP_BEGIN_NAMESPACE
williamr@4
    31
williamr@4
    32
# if ! defined ( _STLP_STATIC_CONST_INIT_BUG)
williamr@4
    33
williamr@4
    34
#   define __declare_numeric_base_member(__type, __mem, _Init) \
williamr@4
    35
template <class __number> \
williamr@4
    36
  const __type _Numeric_limits_base<__number>:: __mem
williamr@4
    37
williamr@4
    38
__declare_numeric_base_member(bool, is_specialized, false);
williamr@4
    39
__declare_numeric_base_member(int, digits, 0);
williamr@4
    40
__declare_numeric_base_member(int, digits10, 0);
williamr@4
    41
__declare_numeric_base_member(bool, is_signed, false);
williamr@4
    42
__declare_numeric_base_member(bool, is_integer, false);
williamr@4
    43
__declare_numeric_base_member(bool, is_exact, false);
williamr@4
    44
__declare_numeric_base_member(int, radix, 0);
williamr@4
    45
__declare_numeric_base_member(int, min_exponent, 0);
williamr@4
    46
__declare_numeric_base_member(int, max_exponent, 0);
williamr@4
    47
__declare_numeric_base_member(int, min_exponent10, 0);
williamr@4
    48
__declare_numeric_base_member(int, max_exponent10, 0);
williamr@4
    49
__declare_numeric_base_member(bool, has_infinity, false);
williamr@4
    50
__declare_numeric_base_member(bool, has_quiet_NaN, false);
williamr@4
    51
__declare_numeric_base_member(bool, has_signaling_NaN, false);
williamr@4
    52
__declare_numeric_base_member(float_denorm_style, has_denorm, denorm_absent);
williamr@4
    53
__declare_numeric_base_member(bool, has_denorm_loss, false);
williamr@4
    54
__declare_numeric_base_member(bool, is_iec559, false);
williamr@4
    55
__declare_numeric_base_member(bool, is_bounded, false);
williamr@4
    56
__declare_numeric_base_member(bool, is_modulo, false);
williamr@4
    57
__declare_numeric_base_member(bool, traps, false);
williamr@4
    58
__declare_numeric_base_member(bool, tinyness_before, false);
williamr@4
    59
__declare_numeric_base_member(float_round_style, round_style, round_toward_zero);
williamr@4
    60
williamr@4
    61
# undef __declare_numeric_base_member
williamr@4
    62
williamr@4
    63
#   define __declare_integer_limits_member(__type, __mem, _Init) \
williamr@4
    64
template <class _Int, _STLP_LIMITS_MIN_TYPE __imin, _STLP_LIMITS_MAX_TYPE __imax, int __idigits, bool __ismod> \
williamr@4
    65
  const __type _Integer_limits<_Int, __imin, __imax, __idigits, __ismod>:: __mem
williamr@4
    66
williamr@4
    67
__declare_integer_limits_member(bool, is_specialized, true);
williamr@4
    68
__declare_integer_limits_member(int, digits, (__idigits < 0) ? \
williamr@4
    69
			    ((int)((sizeof(_Int) * (CHAR_BIT))) - ((__imin == 0) ? 0 : 1)) \
williamr@4
    70
                            : (__idigits) );
williamr@4
    71
__declare_integer_limits_member(int, digits10, (int)(301UL * digits) /1000);
williamr@4
    72
__declare_integer_limits_member(bool, is_signed, __imin != 0);
williamr@4
    73
__declare_integer_limits_member(bool, is_integer, true);
williamr@4
    74
__declare_integer_limits_member(bool, is_exact, true);
williamr@4
    75
__declare_integer_limits_member(int, radix, 2);
williamr@4
    76
__declare_integer_limits_member(bool, is_bounded, true);
williamr@4
    77
__declare_integer_limits_member(bool, is_modulo, true);
williamr@4
    78
williamr@4
    79
#   define __declare_float_limits_member(__type, __mem, _Init) \
williamr@4
    80
template <class __number,  \
williamr@4
    81
         int __Digits, int __Digits10,    \
williamr@4
    82
         int __MinExp, int __MaxExp,      \
williamr@4
    83
         int __MinExp10, int __MaxExp10,  \
williamr@4
    84
         bool __IsIEC559, \
williamr@4
    85
         float_round_style __RoundStyle> \
williamr@4
    86
const __type _Floating_limits< __number, __Digits, __Digits10,    \
williamr@4
    87
         __MinExp, __MaxExp, __MinExp10, __MaxExp10,  \
williamr@4
    88
         __IsIEC559, __RoundStyle>::\
williamr@4
    89
         __mem
williamr@4
    90
williamr@4
    91
__declare_float_limits_member(bool, is_specialized, true);  
williamr@4
    92
__declare_float_limits_member(int, digits, __Digits);  
williamr@4
    93
__declare_float_limits_member(int, digits10, __Digits10);  
williamr@4
    94
__declare_float_limits_member(bool, is_signed, true);  
williamr@4
    95
__declare_float_limits_member(int, radix, FLT_RADIX);  
williamr@4
    96
__declare_float_limits_member(int, min_exponent, __MinExp);  
williamr@4
    97
__declare_float_limits_member(int, max_exponent, __MaxExp);  
williamr@4
    98
__declare_float_limits_member(int, min_exponent10, __MinExp10);  
williamr@4
    99
__declare_float_limits_member(int, max_exponent10, __MaxExp10);  
williamr@4
   100
__declare_float_limits_member(bool, has_infinity, true);
williamr@4
   101
__declare_float_limits_member(bool, has_quiet_NaN, true);
williamr@4
   102
__declare_float_limits_member(bool, has_signaling_NaN, true);
williamr@4
   103
__declare_float_limits_member(float_denorm_style, has_denorm, denorm_indeterminate);
williamr@4
   104
__declare_float_limits_member(bool, has_denorm_loss, false);
williamr@4
   105
__declare_float_limits_member(bool, is_iec559, __IsIEC559);
williamr@4
   106
__declare_float_limits_member(bool, is_bounded, true);
williamr@4
   107
__declare_float_limits_member(bool, traps, true);
williamr@4
   108
__declare_float_limits_member(bool, tinyness_before, false);
williamr@4
   109
__declare_float_limits_member(float_round_style, round_style, __RoundStyle);
williamr@4
   110
williamr@4
   111
# endif /* _STLP_STATIC_CONST_INIT_BUG */
williamr@4
   112
williamr@4
   113
williamr@4
   114
# ifdef _STLP_EXPOSE_GLOBALS_IMPLEMENTATION
williamr@4
   115
williamr@4
   116
# if defined(_STLP_BIG_ENDIAN)
williamr@4
   117
# if defined(__OS400__)
williamr@4
   118
#  define _STLP_FLOAT_INF_REP { 0x7f80, 0 }
williamr@4
   119
#  define _STLP_FLOAT_QNAN_REP { 0xffc0, 0 }
williamr@4
   120
#  define _STLP_FLOAT_SNAN_REP { 0xff80, 0 }
williamr@4
   121
#  define _STLP_DOUBLE_INF_REP { 0x7ff0, 0, 0, 0 }
williamr@4
   122
#  define _STLP_DOUBLE_QNAN_REP { 0xfff8, 0, 0, 0 }
williamr@4
   123
#  define _STLP_DOUBLE_SNAN_REP { 0xfff0, 0, 0, 0 }
williamr@4
   124
#  define _STLP_LDOUBLE_INF_REP { 0x7ff0, 0, 0, 0, 0, 0, 0, 0 }
williamr@4
   125
#  define _STLP_LDOUBLE_QNAN_REP { 0xfff8, 0, 0, 0, 0, 0, 0, 0 }
williamr@4
   126
#  define _STLP_LDOUBLE_SNAN_REP { 0xfff0, 0, 0, 0, 0, 0, 0, 0 }
williamr@4
   127
# else
williamr@4
   128
#  define _STLP_FLOAT_INF_REP   { 0x7f80, 0 }
williamr@4
   129
#  define _STLP_FLOAT_SNAN_REP  { 0x7f81, 0 }
williamr@4
   130
#  define _STLP_FLOAT_QNAN_REP  { 0x7fc1, 0 }
williamr@4
   131
#  define _STLP_DOUBLE_INF_REP  { 0x7ff0, 0, 0, 0 }
williamr@4
   132
#  define _STLP_DOUBLE_QNAN_REP { 0x7ff1, 0, 0, 0 }
williamr@4
   133
#  define _STLP_DOUBLE_SNAN_REP { 0x7ff9, 0, 0, 0 }
williamr@4
   134
#  define _STLP_LDOUBLE_INF_REP { 0x7ff0, 0, 0, 0, 0, 0, 0, 0 }
williamr@4
   135
#  define _STLP_LDOUBLE_SNAN_REP { 0x7ff1, 0, 0, 0, 0, 0, 0, 0 }
williamr@4
   136
#  define _STLP_LDOUBLE_QNAN_REP { 0x7ff9, 0, 0, 0, 0, 0, 0, 0 }
williamr@4
   137
# endif
williamr@4
   138
williamr@4
   139
# elif defined (_STLP_LITTLE_ENDIAN)
williamr@4
   140
williamr@4
   141
# if 0 /* defined(_STLP_MSVC) || defined(__linux__) */
williamr@4
   142
// some IA-32 platform ?? 
williamr@4
   143
#  define _STLP_FLOAT_INF_REP { 0, 0x7f80 }
williamr@4
   144
#  define _STLP_FLOAT_QNAN_REP { 0, 0xffc0 }
williamr@4
   145
#  define _STLP_FLOAT_SNAN_REP { 0, 0xff80 }
williamr@4
   146
williamr@4
   147
#  define _STLP_DOUBLE_INF_REP { 0, 0, 0, 0x7ff0 }
williamr@4
   148
#  define _STLP_DOUBLE_QNAN_REP { 0, 0, 0, 0xfff8 }
williamr@4
   149
#  define _STLP_DOUBLE_SNAN_REP { 0, 0, 0, 0xfff0 }
williamr@4
   150
#  define _STLP_LDOUBLE_INF_REP { 0, 0, 0, 0x7FF0, 0 } // ????
williamr@4
   151
#  define _STLP_LDOUBLE_QNAN_REP { 0, 0, 0, 0xFFF8, 0 } // ????
williamr@4
   152
#  define _STLP_LDOUBLE_SNAN_REP { 0, 0, 0, 0xFFF0, 0 } // ????
williamr@4
   153
williamr@4
   154
# elif defined(__DECCXX)
williamr@4
   155
williamr@4
   156
#  define _STLP_FLOAT_INF_REP { 0, 0x7f80 }
williamr@4
   157
#  define _STLP_FLOAT_QNAN_REP { 0, 0xffc0 }
williamr@4
   158
#  define _STLP_FLOAT_SNAN_REP { 0x5555, 0x7f85 }
williamr@4
   159
williamr@4
   160
#  define _STLP_DOUBLE_INF_REP { 0, 0, 0, 0x7ff0 }
williamr@4
   161
#  define _STLP_DOUBLE_QNAN_REP { 0, 0, 0, 0xfff8 }
williamr@4
   162
#  define _STLP_DOUBLE_SNAN_REP { 0x5555, 0x5555, 0x5555, 0x7ff5 }
williamr@4
   163
williamr@4
   164
#  define _STLP_LDOUBLE_INF_REP { 0, 0, 0, 0, 0, 0, 0, 0x7fff }
williamr@4
   165
#  define _STLP_LDOUBLE_QNAN_REP { 0, 0, 0, 0, 0, 0, 0x8000, 0xffff }
williamr@4
   166
#  define _STLP_LDOUBLE_SNAN_REP { 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x7fff}
williamr@4
   167
# else
williamr@4
   168
#  define _STLP_FLOAT_INF_REP { 0, 0x7f80 }
williamr@4
   169
#  define _STLP_FLOAT_QNAN_REP { 0, 0x7fC0 }
williamr@4
   170
#  define _STLP_FLOAT_SNAN_REP { 0x0001, 0x7f80 }
williamr@4
   171
#  define _STLP_DOUBLE_INF_REP { 0, 0, 0, 0x7ff0 }
williamr@4
   172
#  define _STLP_DOUBLE_QNAN_REP { 0, 0, 0, 0x7ff8 }
williamr@4
   173
#  define _STLP_DOUBLE_SNAN_REP { 0x0001, 0, 0, 0x7ff0 }
williamr@4
   174
#  if defined (_STLP_MSVC) || defined (__ICL) || defined (__BORLANDC__)
williamr@4
   175
#   define _STLP_LDOUBLE_INF_REP { 0, 0, 0, 0x7FF0, 0 } // ????
williamr@4
   176
#   define _STLP_LDOUBLE_QNAN_REP { 0, 0, 0, 0xFFF8, 0 } // ????
williamr@4
   177
#   define _STLP_LDOUBLE_SNAN_REP { 0, 0, 0, 0xFFF8, 0 }
williamr@4
   178
#  else
williamr@4
   179
#   define _STLP_LDOUBLE_INF_REP { 0, 0, 0, 0x8000, 0x7fff }
williamr@4
   180
#   define _STLP_LDOUBLE_QNAN_REP { 0, 0, 0, 0xa000, 0x7fff }
williamr@4
   181
#   define _STLP_LDOUBLE_SNAN_REP { 0, 0, 0, 0xc000, 0x7fff }
williamr@4
   182
#  endif
williamr@4
   183
# endif
williamr@4
   184
#else
williamr@4
   185
/* This is an architecture we don't know how to handle. Return some
williamr@4
   186
obviously wrong values. */
williamr@4
   187
# define _STLP_FLOAT_INF_REP { 0, 0 }
williamr@4
   188
# define _STLP_FLOAT_QNAN_REP { 0, 0 }
williamr@4
   189
# define _STLP_FLOAT_SNAN_REP { 0, 0 }
williamr@4
   190
# define _STLP_DOUBLE_INF_REP { 0, 0 }
williamr@4
   191
# define _STLP_DOUBLE_QNAN_REP { 0, 0 }
williamr@4
   192
# define _STLP_DOUBLE_SNAN_REP { 0, 0 }
williamr@4
   193
# define _STLP_LDOUBLE_INF_REP { 0 }
williamr@4
   194
# define _STLP_LDOUBLE_QNAN_REP { 0 }
williamr@4
   195
# define _STLP_LDOUBLE_SNAN_REP { 0 }
williamr@4
   196
williamr@4
   197
#endif
williamr@4
   198
williamr@4
   199
#if ( _STLP_STATIC_TEMPLATE_DATA > 0 )
williamr@4
   200
# ifndef _STLP_NO_LONG_DOUBLE
williamr@4
   201
template <class __dummy>
williamr@4
   202
const _L_rep _LimG<__dummy>::_L_inf  = {_STLP_LDOUBLE_INF_REP}; 
williamr@4
   203
template <class __dummy>
williamr@4
   204
const _L_rep _LimG<__dummy>::_L_qNaN  = {_STLP_LDOUBLE_QNAN_REP}; 
williamr@4
   205
template <class __dummy>
williamr@4
   206
const _L_rep _LimG<__dummy>::_L_sNaN  = {_STLP_LDOUBLE_SNAN_REP}; 
williamr@4
   207
# endif
williamr@4
   208
template <class __dummy>
williamr@4
   209
const _D_rep _LimG<__dummy>::_D_inf  = {_STLP_DOUBLE_INF_REP}; 
williamr@4
   210
template <class __dummy>
williamr@4
   211
const _D_rep _LimG<__dummy>::_D_qNaN  = {_STLP_DOUBLE_QNAN_REP}; 
williamr@4
   212
template <class __dummy>
williamr@4
   213
const _D_rep _LimG<__dummy>::_D_sNaN  = {_STLP_DOUBLE_SNAN_REP}; 
williamr@4
   214
template <class __dummy>
williamr@4
   215
const _F_rep _LimG<__dummy>::_F_inf  = {_STLP_FLOAT_INF_REP}; 
williamr@4
   216
template <class __dummy>
williamr@4
   217
const _F_rep _LimG<__dummy>::_F_qNaN  = {_STLP_FLOAT_QNAN_REP}; 
williamr@4
   218
template <class __dummy>
williamr@4
   219
const _F_rep _LimG<__dummy>::_F_sNaN  = {_STLP_FLOAT_SNAN_REP}; 
williamr@4
   220
williamr@4
   221
#else
williamr@4
   222
williamr@4
   223
__DECLARE_INSTANCE( const _F_rep,
williamr@4
   224
                   _LimG<bool>::_F_inf,  = _STLP_FLOAT_INF_REP);
williamr@4
   225
__DECLARE_INSTANCE( const _F_rep,
williamr@4
   226
                   _LimG<bool>::_F_qNaN,  = _STLP_FLOAT_QNAN_REP);
williamr@4
   227
__DECLARE_INSTANCE( const _F_rep,
williamr@4
   228
                   _LimG<bool>::_F_sNaN,  = _STLP_FLOAT_SNAN_REP);
williamr@4
   229
__DECLARE_INSTANCE( const _D_rep,
williamr@4
   230
                   _LimG<bool>::_D_inf,  = _STLP_DOUBLE_INF_REP);
williamr@4
   231
__DECLARE_INSTANCE( const _D_rep,
williamr@4
   232
                   _LimG<bool>::_D_qNaN,  = _STLP_DOUBLE_QNAN_REP);
williamr@4
   233
__DECLARE_INSTANCE( const _D_rep,
williamr@4
   234
                   _LimG<bool>::_D_sNaN,  = _STLP_DOUBLE_SNAN_REP);
williamr@4
   235
# ifndef _STLP_NO_LONG_DOUBLE
williamr@4
   236
__DECLARE_INSTANCE( const _L_rep,
williamr@4
   237
                   _LimG<bool>::_L_inf,  = _STLP_LDOUBLE_INF_REP);
williamr@4
   238
__DECLARE_INSTANCE( const _L_rep,
williamr@4
   239
                   _LimG<bool>::_L_qNaN,  = _STLP_LDOUBLE_QNAN_REP);
williamr@4
   240
__DECLARE_INSTANCE( const _L_rep,
williamr@4
   241
                   _LimG<bool>::_L_sNaN,  = _STLP_LDOUBLE_SNAN_REP);
williamr@4
   242
# endif
williamr@4
   243
williamr@4
   244
#endif /* STATIC_DATA */   
williamr@4
   245
williamr@4
   246
# endif /* _STLP_EXPOSE_GLOBALS_IMPLEMENTATION */
williamr@4
   247
    
williamr@4
   248
# undef __declare_integer_limits_member
williamr@4
   249
# undef __declare_float_limits_member
williamr@4
   250
# undef __HACK_ILIMITS
williamr@4
   251
# undef __HACK_NOTHING
williamr@4
   252
# undef __declare_int_members
williamr@4
   253
# undef __declare_float_members
williamr@4
   254
# undef _STLP_LIMITS_MIN_TYPE
williamr@4
   255
# undef _STLP_LIMITS_MAX_TYPE
williamr@4
   256
williamr@4
   257
# undef _STLP_FLOAT_INF_REP
williamr@4
   258
# undef _STLP_FLOAT_QNAN_REP
williamr@4
   259
# undef _STLP_FLOAT_SNAN_REP
williamr@4
   260
# undef _STLP_DOUBLE_INF_REP
williamr@4
   261
# undef _STLP_DOUBLE_QNAN_REP
williamr@4
   262
# undef _STLP_DOUBLE_SNAN_REP
williamr@4
   263
# undef _STLP_LDOUBLE_INF_REP
williamr@4
   264
# undef _STLP_LDOUBLE_QNAN_REP
williamr@4
   265
# undef _STLP_LDOUBLE_SNAN_REP
williamr@4
   266
williamr@4
   267
_STLP_END_NAMESPACE
williamr@4
   268
williamr@4
   269
williamr@4
   270
#endif /* _STLP_LIMITS_C_INCLUDED */