epoc32/include/stdapis/boost/limits.hpp
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
parent 3 e1b950c65cb4
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
//  (C) Copyright John maddock 1999. 
williamr@4
     3
//  (C) David Abrahams 2002.  Distributed under the Boost
williamr@4
     4
//  Software License, Version 1.0. (See accompanying file
williamr@4
     5
//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
williamr@4
     6
//
williamr@4
     7
// use this header as a workaround for missing <limits>
williamr@4
     8
williamr@4
     9
//  See http://www.boost.org/libs/utility/limits.html for documentation.
williamr@4
    10
williamr@4
    11
#ifndef BOOST_LIMITS
williamr@4
    12
#define BOOST_LIMITS
williamr@4
    13
williamr@4
    14
#include <boost/config.hpp>
williamr@4
    15
williamr@4
    16
#ifdef BOOST_NO_LIMITS
williamr@4
    17
# include <boost/detail/limits.hpp>
williamr@4
    18
#else
williamr@4
    19
# include <limits>
williamr@4
    20
#endif
williamr@4
    21
williamr@4
    22
#if (defined(BOOST_HAS_LONG_LONG) && defined(BOOST_NO_LONG_LONG_NUMERIC_LIMITS)) \
williamr@4
    23
      || (defined(BOOST_HAS_MS_INT64) && defined(BOOST_NO_MS_INT64_NUMERIC_LIMITS))
williamr@4
    24
// Add missing specializations for numeric_limits:
williamr@4
    25
#ifdef BOOST_HAS_MS_INT64
williamr@4
    26
#  define BOOST_LLT __int64
williamr@4
    27
#  define BOOST_ULLT unsigned __int64
williamr@4
    28
#else
williamr@4
    29
#  define BOOST_LLT  ::boost::long_long_type
williamr@4
    30
#  define BOOST_ULLT  ::boost::ulong_long_type
williamr@4
    31
#endif
williamr@4
    32
williamr@4
    33
namespace std
williamr@4
    34
{
williamr@4
    35
  template<>
williamr@4
    36
  class numeric_limits<BOOST_LLT> 
williamr@4
    37
  {
williamr@4
    38
   public:
williamr@4
    39
williamr@4
    40
      BOOST_STATIC_CONSTANT(bool, is_specialized = true);
williamr@4
    41
#ifdef BOOST_HAS_MS_INT64
williamr@4
    42
      static BOOST_LLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 0x8000000000000000i64; }
williamr@4
    43
      static BOOST_LLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 0x7FFFFFFFFFFFFFFFi64; }
williamr@4
    44
#elif defined(LLONG_MAX)
williamr@4
    45
      static BOOST_LLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return LLONG_MIN; }
williamr@4
    46
      static BOOST_LLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return LLONG_MAX; }
williamr@4
    47
#elif defined(LONGLONG_MAX)
williamr@4
    48
      static BOOST_LLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return LONGLONG_MIN; }
williamr@4
    49
      static BOOST_LLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return LONGLONG_MAX; }
williamr@4
    50
#else
williamr@4
    51
      static BOOST_LLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 1LL << (sizeof(BOOST_LLT) * CHAR_BIT - 1); }
williamr@4
    52
      static BOOST_LLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ~(min)(); }
williamr@4
    53
#endif
williamr@4
    54
      BOOST_STATIC_CONSTANT(int, digits = sizeof(BOOST_LLT) * CHAR_BIT -1);
williamr@4
    55
      BOOST_STATIC_CONSTANT(int, digits10 = (CHAR_BIT * sizeof (BOOST_LLT) - 1) * 301L / 1000);
williamr@4
    56
      BOOST_STATIC_CONSTANT(bool, is_signed = true);
williamr@4
    57
      BOOST_STATIC_CONSTANT(bool, is_integer = true);
williamr@4
    58
      BOOST_STATIC_CONSTANT(bool, is_exact = true);
williamr@4
    59
      BOOST_STATIC_CONSTANT(int, radix = 2);
williamr@4
    60
      static BOOST_LLT epsilon() throw() { return 0; };
williamr@4
    61
      static BOOST_LLT round_error() throw() { return 0; };
williamr@4
    62
williamr@4
    63
      BOOST_STATIC_CONSTANT(int, min_exponent = 0);
williamr@4
    64
      BOOST_STATIC_CONSTANT(int, min_exponent10 = 0);
williamr@4
    65
      BOOST_STATIC_CONSTANT(int, max_exponent = 0);
williamr@4
    66
      BOOST_STATIC_CONSTANT(int, max_exponent10 = 0);
williamr@4
    67
williamr@4
    68
      BOOST_STATIC_CONSTANT(bool, has_infinity = false);
williamr@4
    69
      BOOST_STATIC_CONSTANT(bool, has_quiet_NaN = false);
williamr@4
    70
      BOOST_STATIC_CONSTANT(bool, has_signaling_NaN = false);
williamr@4
    71
      BOOST_STATIC_CONSTANT(bool, has_denorm = false);
williamr@4
    72
      BOOST_STATIC_CONSTANT(bool, has_denorm_loss = false);
williamr@4
    73
      static BOOST_LLT infinity() throw() { return 0; };
williamr@4
    74
      static BOOST_LLT quiet_NaN() throw() { return 0; };
williamr@4
    75
      static BOOST_LLT signaling_NaN() throw() { return 0; };
williamr@4
    76
      static BOOST_LLT denorm_min() throw() { return 0; };
williamr@4
    77
williamr@4
    78
      BOOST_STATIC_CONSTANT(bool, is_iec559 = false);
williamr@4
    79
      BOOST_STATIC_CONSTANT(bool, is_bounded = false);
williamr@4
    80
      BOOST_STATIC_CONSTANT(bool, is_modulo = false);
williamr@4
    81
williamr@4
    82
      BOOST_STATIC_CONSTANT(bool, traps = false);
williamr@4
    83
      BOOST_STATIC_CONSTANT(bool, tinyness_before = false);
williamr@4
    84
      BOOST_STATIC_CONSTANT(float_round_style, round_style = round_toward_zero);
williamr@4
    85
      
williamr@4
    86
  };
williamr@4
    87
williamr@4
    88
  template<>
williamr@4
    89
  class numeric_limits<BOOST_ULLT> 
williamr@4
    90
  {
williamr@4
    91
   public:
williamr@4
    92
williamr@4
    93
      BOOST_STATIC_CONSTANT(bool, is_specialized = true);
williamr@4
    94
#ifdef BOOST_HAS_MS_INT64
williamr@4
    95
      static BOOST_ULLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 0ui64; }
williamr@4
    96
      static BOOST_ULLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 0xFFFFFFFFFFFFFFFFui64; }
williamr@4
    97
#elif defined(ULLONG_MAX) && defined(ULLONG_MIN)
williamr@4
    98
      static BOOST_ULLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ULLONG_MIN; }
williamr@4
    99
      static BOOST_ULLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ULLONG_MAX; }
williamr@4
   100
#elif defined(ULONGLONG_MAX) && defined(ULONGLONG_MIN)
williamr@4
   101
      static BOOST_ULLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ULONGLONG_MIN; }
williamr@4
   102
      static BOOST_ULLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ULONGLONG_MAX; }
williamr@4
   103
#else
williamr@4
   104
      static BOOST_ULLT min BOOST_PREVENT_MACRO_SUBSTITUTION (){ return 0uLL; }
williamr@4
   105
      static BOOST_ULLT max BOOST_PREVENT_MACRO_SUBSTITUTION (){ return ~0uLL; }
williamr@4
   106
#endif
williamr@4
   107
      BOOST_STATIC_CONSTANT(int, digits = sizeof(BOOST_LLT) * CHAR_BIT);
williamr@4
   108
      BOOST_STATIC_CONSTANT(int, digits10 = (CHAR_BIT * sizeof (BOOST_LLT)) * 301L / 1000);
williamr@4
   109
      BOOST_STATIC_CONSTANT(bool, is_signed = false);
williamr@4
   110
      BOOST_STATIC_CONSTANT(bool, is_integer = true);
williamr@4
   111
      BOOST_STATIC_CONSTANT(bool, is_exact = true);
williamr@4
   112
      BOOST_STATIC_CONSTANT(int, radix = 2);
williamr@4
   113
      static BOOST_ULLT epsilon() throw() { return 0; };
williamr@4
   114
      static BOOST_ULLT round_error() throw() { return 0; };
williamr@4
   115
williamr@4
   116
      BOOST_STATIC_CONSTANT(int, min_exponent = 0);
williamr@4
   117
      BOOST_STATIC_CONSTANT(int, min_exponent10 = 0);
williamr@4
   118
      BOOST_STATIC_CONSTANT(int, max_exponent = 0);
williamr@4
   119
      BOOST_STATIC_CONSTANT(int, max_exponent10 = 0);
williamr@4
   120
williamr@4
   121
      BOOST_STATIC_CONSTANT(bool, has_infinity = false);
williamr@4
   122
      BOOST_STATIC_CONSTANT(bool, has_quiet_NaN = false);
williamr@4
   123
      BOOST_STATIC_CONSTANT(bool, has_signaling_NaN = false);
williamr@4
   124
      BOOST_STATIC_CONSTANT(bool, has_denorm = false);
williamr@4
   125
      BOOST_STATIC_CONSTANT(bool, has_denorm_loss = false);
williamr@4
   126
      static BOOST_ULLT infinity() throw() { return 0; };
williamr@4
   127
      static BOOST_ULLT quiet_NaN() throw() { return 0; };
williamr@4
   128
      static BOOST_ULLT signaling_NaN() throw() { return 0; };
williamr@4
   129
      static BOOST_ULLT denorm_min() throw() { return 0; };
williamr@4
   130
williamr@4
   131
      BOOST_STATIC_CONSTANT(bool, is_iec559 = false);
williamr@4
   132
      BOOST_STATIC_CONSTANT(bool, is_bounded = false);
williamr@4
   133
      BOOST_STATIC_CONSTANT(bool, is_modulo = false);
williamr@4
   134
williamr@4
   135
      BOOST_STATIC_CONSTANT(bool, traps = false);
williamr@4
   136
      BOOST_STATIC_CONSTANT(bool, tinyness_before = false);
williamr@4
   137
      BOOST_STATIC_CONSTANT(float_round_style, round_style = round_toward_zero);
williamr@4
   138
      
williamr@4
   139
  };
williamr@4
   140
}
williamr@4
   141
#endif 
williamr@4
   142
williamr@4
   143
#endif