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