This repository has been archived on 2024-12-16. You can view files and clone it, but cannot push or open issues or pull requests.
CodeBlocksPortable/Borland/BCC55/Include/limits.stl

1018 lines
44 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef __LIMITS_STL
#define __LIMITS_STL
#pragma option push -b -a8 -pc -Vx- -Ve- -w-inl -w-aus -w-sig
// -*- C++ -*-
#ifndef __STD_LIMITS
#define __STD_LIMITS
/***************************************************************************
*
* limits - Declarations for the Standard Library limits class
*
***************************************************************************
*
* Copyright (c) 1994-1999 Rogue Wave Software, Inc. All Rights Reserved.
*
* This computer software is owned by Rogue Wave Software, Inc. and is
* protected by U.S. copyright laws and other laws and by international
* treaties. This computer software is furnished by Rogue Wave Software,
* Inc. pursuant to a written license agreement and may be used, copied,
* transmitted, and stored only in accordance with the terms of such
* license and with the inclusion of the above copyright notice. This
* computer software or any other copies thereof may not be provided or
* otherwise made available to any other person.
*
* U.S. Government Restricted Rights. This computer software is provided
* with Restricted Rights. Use, duplication, or disclosure by the
* Government is subject to restrictions as set forth in subparagraph (c)
* (1) (ii) of The Rights in Technical Data and Computer Software clause
* at DFARS 252.227-7013 or subparagraphs (c) (1) and (2) of the
* Commercial Computer Software Restricted Rights at 48 CFR 52.227-19,
* as applicable. Manufacturer is Rogue Wave Software, Inc., 5500
* Flatiron Parkway, Boulder, Colorado 80301 USA.
*
**************************************************************************/
#include <stdcomp.h>
#include <rw/stddefs.h>
#include <rw/math.h>
#ifndef _RWSTD_NO_NEW_HEADER
#include <cfloat>
#include <climits>
#ifdef _RWSTD_REQUIRES_IEEEFP
#include <ieeefp.h> // for siemens
#endif
#else
#include <float.h>
#ifdef _RWSTD_REQUIRES_IEEEFP
#include <ieeefp.h> // for siemens
#endif
#include <limits.h>
#endif
//
// Turn off the warnings under the MSVC compiler that
// say 'bool reserved for future use'
//
#ifdef _RWSTD_MSVC_BOOL_WARNING
#pragma warning ( disable : 4237 )
#endif
#ifndef _RWSTD_NO_NAMESPACE
namespace std {
#endif
#if defined(__OS2__) || defined(__MFC_COMPAT__)
# ifdef max
# undef max
# endif
# ifdef min
# undef min
# endif
#endif /*__OS2__ || __MFC_COMPAT__*/
enum float_round_style
{
round_indeterminate = -1,
round_toward_zero = 0,
round_to_nearest = 1,
round_toward_infinity = 2,
round_toward_neg_infinity = 3
};
enum float_denorm_style
{
denorm_indeterminate = -1,
denorm_absent = 0,
denorm_present = 1
};
#if !defined(_RWSTD_NO_STI_SIMPLE)
#define __RW_INIT(n) = n
#else
#define __RW_INIT(n) /**/
#endif
//**********************************************************************
//
// Assumptions made in this implementation:
//
// 1) numeric_limits<int>::radix equals numeric_limits<T>::radix
// for all integral T specialized in this file.
//
// 2) numeric_limits<int>::is_modulo equals numeric_limits<T>::is_modulo
// for all signed integral T specialized in this file, except
// numeric_limits<bool>::is_modulo, which is assumed to be false.
//
// 3) numeric_limts<T>::traps == false for all builtin integral T.
//
// Does there exist a machine for which these aren't true?
//
//**********************************************************************
//**********************************************************************
//
// If your compiler allows in-class initialization of static const data
// members of integral type, then look for all lines having a comment of
// the form
//
// // VENDOR
//
// and set the value on that line to the proper one for your environment.
//
// If your compiler does NOT allow in-class initialization of static const
// data members of integral type, then you'll need to set the values in
// stdlib/src/limits/limits.cpp so they're properly archived into the
// Standard Library.
//
//**********************************************************************
template <class T>
class _RWSTDExportTemplate numeric_limits;
//
// Specialization for float.
//
_RWSTD_TEMPLATE
class _RWSTDExport numeric_limits<float>
{
public:
static const bool _RWSTDExportTemplate is_specialized __RW_INIT(true);
static inline float min () _RWSTD_INLINE_NO_THROW { return FLT_MIN; }
static inline float max () _RWSTD_INLINE_NO_THROW { return FLT_MAX; }
static const _RWSTDExportTemplate int digits __RW_INIT(FLT_MANT_DIG);
static const _RWSTDExportTemplate int digits10 __RW_INIT(FLT_DIG);
static const bool _RWSTDExportTemplate is_signed __RW_INIT(true);
static const bool _RWSTDExportTemplate is_integer __RW_INIT(false);
static const bool _RWSTDExportTemplate is_exact __RW_INIT(false);
static const int _RWSTDExportTemplate radix __RW_INIT(FLT_RADIX);
static inline float epsilon () _RWSTD_INLINE_NO_THROW { return FLT_EPSILON; }
static float _RWSTDExportTemplate round_error () _RWSTD_INLINE_NO_THROW;
static const int _RWSTDExportTemplate min_exponent __RW_INIT(FLT_MIN_EXP);
static const int _RWSTDExportTemplate min_exponent10 __RW_INIT(FLT_MIN_10_EXP);
static const int _RWSTDExportTemplate max_exponent __RW_INIT(FLT_MAX_EXP);
static const int _RWSTDExportTemplate max_exponent10 __RW_INIT(FLT_MAX_10_EXP);
static const bool _RWSTDExportTemplate has_infinity __RW_INIT(true); // VENDOR
static const bool _RWSTDExportTemplate has_quiet_NaN __RW_INIT(true); // VENDOR
static const bool _RWSTDExportTemplate has_signaling_NaN __RW_INIT(true); // VENDOR
static const float_denorm_style _RWSTDExportTemplate has_denorm __RW_INIT(denorm_indeterminate); // VENDOR
static const bool _RWSTDExportTemplate has_denorm_loss __RW_INIT(false); // VENDOR
static float infinity () _RWSTD_INLINE_NO_THROW;
static float quiet_NaN () _RWSTD_INLINE_NO_THROW;
static float signaling_NaN () _RWSTD_INLINE_NO_THROW;
static float denorm_min () _RWSTD_INLINE_NO_THROW;
static const bool _RWSTDExportTemplate is_iec559 __RW_INIT(false); // VENDOR
static const bool _RWSTDExportTemplate is_bounded __RW_INIT(true);
static const bool _RWSTDExportTemplate is_modulo __RW_INIT(false); // VENDOR
static const bool _RWSTDExportTemplate traps __RW_INIT(false); // VENDOR
static const bool _RWSTDExportTemplate tinyness_before __RW_INIT(false); // VENDOR
#ifndef _RWSTD_FLT_ROUNDS_IS_CONSTANT
static const float_round_style _RWSTDExportTemplate round_style;
#else
static const float_round_style _RWSTDExportTemplate round_style __RW_INIT(_RWSTD_STATIC_CAST(float_round_style,FLT_ROUNDS));
#endif
};
//
// Specialization for double.
//
_RWSTD_TEMPLATE
class _RWSTDExport numeric_limits<double>
{
public:
static const bool _RWSTDExportTemplate is_specialized __RW_INIT(true);
static inline double min () _RWSTD_INLINE_NO_THROW { return DBL_MIN; }
static inline double max () _RWSTD_INLINE_NO_THROW { return DBL_MAX; }
static const int _RWSTDExportTemplate digits __RW_INIT(DBL_MANT_DIG);
static const int _RWSTDExportTemplate digits10 __RW_INIT(DBL_DIG);
static const bool _RWSTDExportTemplate is_signed __RW_INIT(true);
static const bool _RWSTDExportTemplate is_integer __RW_INIT(false);
static const bool _RWSTDExportTemplate is_exact __RW_INIT(false);
static const int _RWSTDExportTemplate radix __RW_INIT(FLT_RADIX);
static inline double epsilon () _RWSTD_INLINE_NO_THROW { return DBL_EPSILON; }
static double round_error () _RWSTD_INLINE_NO_THROW;
static const int _RWSTDExportTemplate min_exponent __RW_INIT(DBL_MIN_EXP);
static const int _RWSTDExportTemplate min_exponent10 __RW_INIT(DBL_MIN_10_EXP);
static const int _RWSTDExportTemplate max_exponent __RW_INIT(DBL_MAX_EXP);
static const int _RWSTDExportTemplate max_exponent10 __RW_INIT(DBL_MAX_10_EXP);
static const bool _RWSTDExportTemplate has_infinity __RW_INIT(true); // VENDOR
static const bool _RWSTDExportTemplate has_quiet_NaN __RW_INIT(true); // VENDOR
static const bool _RWSTDExportTemplate has_signaling_NaN __RW_INIT(true); // VENDOR
static const float_denorm_style _RWSTDExportTemplate has_denorm __RW_INIT(denorm_indeterminate); // VENDOR
static const bool _RWSTDExportTemplate has_denorm_loss __RW_INIT(false); // VENDOR
static double infinity () _RWSTD_INLINE_NO_THROW;
static double quiet_NaN () _RWSTD_INLINE_NO_THROW;
static double signaling_NaN () _RWSTD_INLINE_NO_THROW;
static double denorm_min () _RWSTD_INLINE_NO_THROW;
static const bool _RWSTDExportTemplate is_iec559 __RW_INIT(false); // VENDOR
static const bool _RWSTDExportTemplate is_bounded __RW_INIT(true);
static const bool _RWSTDExportTemplate is_modulo __RW_INIT(false); // VENDOR
static const bool _RWSTDExportTemplate traps __RW_INIT(false); // VENDOR
static const bool _RWSTDExportTemplate tinyness_before __RW_INIT(false); // VENDOR
#ifndef _RWSTD_FLT_ROUNDS_IS_CONSTANT
static const float_round_style _RWSTDExportTemplate round_style;
#else
static const float_round_style _RWSTDExportTemplate round_style __RW_INIT(_RWSTD_STATIC_CAST(float_round_style,FLT_ROUNDS));
#endif
};
//
// Specialization for long double.
//
#ifndef _RWSTD_NO_LONGDOUBLE
_RWSTD_TEMPLATE
class _RWSTDExport numeric_limits<long double>
{
public:
static const bool _RWSTDExportTemplate is_specialized __RW_INIT(true);
static inline long double min () _RWSTD_INLINE_NO_THROW { return LDBL_MIN; }
static inline long double max () _RWSTD_INLINE_NO_THROW { return LDBL_MAX; }
static const int _RWSTDExportTemplate digits __RW_INIT(LDBL_MANT_DIG);
static const int _RWSTDExportTemplate digits10 __RW_INIT(LDBL_DIG);
static const bool _RWSTDExportTemplate is_signed __RW_INIT(true);
static const bool _RWSTDExportTemplate is_integer __RW_INIT(false);
static const bool _RWSTDExportTemplate is_exact __RW_INIT(false);
static const int _RWSTDExportTemplate radix __RW_INIT(FLT_RADIX);
static inline long double epsilon () _RWSTD_INLINE_NO_THROW { return LDBL_EPSILON; }
static long double round_error () _RWSTD_INLINE_NO_THROW;
static const int _RWSTDExportTemplate min_exponent __RW_INIT(LDBL_MIN_EXP);
static const int _RWSTDExportTemplate min_exponent10 __RW_INIT(LDBL_MIN_10_EXP);
static const int _RWSTDExportTemplate max_exponent __RW_INIT(LDBL_MAX_EXP);
static const int _RWSTDExportTemplate max_exponent10 __RW_INIT(LDBL_MAX_10_EXP);
static const bool _RWSTDExportTemplate has_infinity __RW_INIT(true); // VENDOR
static const bool _RWSTDExportTemplate has_quiet_NaN __RW_INIT(true); // VENDOR
static const bool _RWSTDExportTemplate has_signaling_NaN __RW_INIT(true); // VENDOR
static const float_denorm_style _RWSTDExportTemplate has_denorm __RW_INIT(denorm_indeterminate); // VENDOR
static const bool _RWSTDExportTemplate has_denorm_loss __RW_INIT(false); // VENDOR
static long double _RWSTDExportTemplate infinity () _RWSTD_INLINE_NO_THROW;
static long double _RWSTDExportTemplate quiet_NaN () _RWSTD_INLINE_NO_THROW;
static long double _RWSTDExportTemplate signaling_NaN () _RWSTD_INLINE_NO_THROW;
static long double _RWSTDExportTemplate denorm_min () _RWSTD_INLINE_NO_THROW;
static const bool _RWSTDExportTemplate is_iec559 __RW_INIT(false); // VENDOR
static const bool _RWSTDExportTemplate is_bounded __RW_INIT(true);
static const bool _RWSTDExportTemplate is_modulo __RW_INIT(false); // VENDOR
static const bool _RWSTDExportTemplate traps __RW_INIT(false); // VENDOR
static const bool _RWSTDExportTemplate tinyness_before __RW_INIT(false); // VENDOR
#ifndef _RWSTD_FLT_ROUNDS_IS_CONSTANT
static const float_round_style _RWSTDExportTemplate round_style;
#else
static const float_round_style _RWSTDExportTemplate round_style __RW_INIT(_RWSTD_STATIC_CAST(float_round_style,FLT_ROUNDS));
#endif
};
#endif /* _RWSTD_NO_LONGDOUBLE */
//
// Specialization for int.
//
_RWSTD_TEMPLATE
class _RWSTDExport numeric_limits<int>
{
public:
static const bool _RWSTDExportTemplate is_specialized __RW_INIT(true);
static inline int min () _RWSTD_INLINE_NO_THROW { return INT_MIN; }
static inline int max () _RWSTD_INLINE_NO_THROW { return INT_MAX; }
static const int _RWSTDExportTemplate digits __RW_INIT(CHAR_BIT*sizeof(int)-1);
// static const int _RWSTDExportTemplate digits10 __RW_INIT(int(digits/3.321928095));
static const int _RWSTDExportTemplate digits10;
static const bool _RWSTDExportTemplate is_signed __RW_INIT(true);
static const bool _RWSTDExportTemplate is_integer __RW_INIT(true);
static const bool _RWSTDExportTemplate is_exact __RW_INIT(true);
static const int _RWSTDExportTemplate radix __RW_INIT(2); // VENDOR
static inline int epsilon () _RWSTD_INLINE_NO_THROW { return 0; }
static inline int round_error () _RWSTD_INLINE_NO_THROW { return 0; }
static const int _RWSTDExportTemplate min_exponent __RW_INIT(0);
static const int _RWSTDExportTemplate min_exponent10 __RW_INIT(0);
static const int _RWSTDExportTemplate max_exponent __RW_INIT(0);
static const int _RWSTDExportTemplate max_exponent10 __RW_INIT(0);
static const bool _RWSTDExportTemplate has_infinity __RW_INIT(false);
static const bool _RWSTDExportTemplate has_quiet_NaN __RW_INIT(false);
static const bool _RWSTDExportTemplate has_signaling_NaN __RW_INIT(false);
static const float_denorm_style _RWSTDExportTemplate has_denorm __RW_INIT(denorm_absent);
static const bool _RWSTDExportTemplate has_denorm_loss __RW_INIT(false);
static inline int _RWSTDExportTemplate infinity () _RWSTD_INLINE_NO_THROW { return 0; }
static inline int _RWSTDExportTemplate quiet_NaN () _RWSTD_INLINE_NO_THROW { return 0; }
static inline int _RWSTDExportTemplate signaling_NaN () _RWSTD_INLINE_NO_THROW { return 0; }
static inline int _RWSTDExportTemplate denorm_min () _RWSTD_INLINE_NO_THROW { return min(); }
static const bool _RWSTDExportTemplate is_iec559 __RW_INIT(false);
static const bool _RWSTDExportTemplate is_bounded __RW_INIT(true);
static const bool _RWSTDExportTemplate is_modulo __RW_INIT(false); // VENDOR
static const bool _RWSTDExportTemplate traps __RW_INIT(false);
static const bool _RWSTDExportTemplate tinyness_before __RW_INIT(false);
static const float_round_style _RWSTDExportTemplate round_style __RW_INIT(round_toward_zero);
};
#ifndef _RWSTD_NO_OVERLOAD_WCHAR
_RWSTD_TEMPLATE
class _RWSTDExport numeric_limits<wchar_t>
{
public:
static const bool _RWSTDExportTemplate is_specialized __RW_INIT(true);
static wchar_t min () _RWSTD_INLINE_NO_THROW;
static wchar_t max () _RWSTD_INLINE_NO_THROW;
static const bool _RWSTDExportTemplate is_signed __RW_INIT(true); // VENDOR
static const int _RWSTDExportTemplate digits __RW_INIT(is_signed ? CHAR_BIT*sizeof(wchar_t) - 1 : CHAR_BIT*sizeof(wchar_t));
// static const int _RWSTDExportTemplate digits10 __RW_INIT(int(digits/3.321928095));
static const int _RWSTDExportTemplate digits10;
static const bool _RWSTDExportTemplate is_integer __RW_INIT(true);
static const bool _RWSTDExportTemplate is_exact __RW_INIT(true);
static const int _RWSTDExportTemplate radix __RW_INIT(numeric_limits<int>::radix);
static inline wchar_t epsilon () _RWSTD_INLINE_NO_THROW { return 0; }
static inline wchar_t round_error () _RWSTD_INLINE_NO_THROW { return 0; }
static const int _RWSTDExportTemplate min_exponent __RW_INIT(0);
static const int _RWSTDExportTemplate min_exponent10 __RW_INIT(0);
static const int _RWSTDExportTemplate max_exponent __RW_INIT(0);
static const int _RWSTDExportTemplate max_exponent10 __RW_INIT(0);
static const bool _RWSTDExportTemplate has_infinity __RW_INIT(false);
static const bool _RWSTDExportTemplate has_quiet_NaN __RW_INIT(false);
static const bool _RWSTDExportTemplate has_signaling_NaN __RW_INIT(false);
static const float_denorm_style _RWSTDExportTemplate has_denorm __RW_INIT(denorm_absent);
static const bool _RWSTDExportTemplate has_denorm_loss __RW_INIT(false);
static inline wchar_t _RWSTDExportTemplate infinity () _RWSTD_INLINE_NO_THROW { return 0; }
static inline wchar_t _RWSTDExportTemplate quiet_NaN () _RWSTD_INLINE_NO_THROW { return 0; }
static inline wchar_t _RWSTDExportTemplate signaling_NaN () _RWSTD_INLINE_NO_THROW { return 0; }
static inline wchar_t _RWSTDExportTemplate denorm_min () _RWSTD_INLINE_NO_THROW { return min(); }
static const bool _RWSTDExportTemplate is_iec559 __RW_INIT(false);
static const bool _RWSTDExportTemplate is_bounded __RW_INIT(true);
static const bool _RWSTDExportTemplate is_modulo __RW_INIT(is_signed ? numeric_limits<int>::is_modulo : true);
static const bool _RWSTDExportTemplate traps __RW_INIT(false);
static const bool _RWSTDExportTemplate tinyness_before __RW_INIT(false);
static const float_round_style _RWSTDExportTemplate round_style __RW_INIT(round_toward_zero);
};
#endif /*!_RWSTD_NO_OVERLOAD_WCHAR*/
//**********************************************************************
//
// There are no VENDOR-settable values beyond this point.
//
//**********************************************************************
//
// Specialization for short.
//
_RWSTD_TEMPLATE
class _RWSTDExport numeric_limits<short>
{
public:
static const bool _RWSTDExportTemplate is_specialized __RW_INIT(true);
static inline short min () _RWSTD_INLINE_NO_THROW { return SHRT_MIN; }
static inline short max () _RWSTD_INLINE_NO_THROW { return SHRT_MAX; }
static const int _RWSTDExportTemplate digits __RW_INIT(CHAR_BIT*sizeof(short)-1);
// static const int _RWSTDExportTemplate digits10 __RW_INIT(int(digits/3.321928095));
static const int _RWSTDExportTemplate digits10;
static const bool _RWSTDExportTemplate is_signed __RW_INIT(true);
static const bool _RWSTDExportTemplate is_integer __RW_INIT(true);
static const bool _RWSTDExportTemplate is_exact __RW_INIT(true);
static const int _RWSTDExportTemplate radix __RW_INIT(numeric_limits<int>::radix);
static inline short epsilon () _RWSTD_INLINE_NO_THROW { return 0; }
static inline short round_error () _RWSTD_INLINE_NO_THROW { return 0; }
static const int _RWSTDExportTemplate min_exponent __RW_INIT(0);
static const int _RWSTDExportTemplate min_exponent10 __RW_INIT(0);
static const int _RWSTDExportTemplate max_exponent __RW_INIT(0);
static const int _RWSTDExportTemplate max_exponent10 __RW_INIT(0);
static const bool _RWSTDExportTemplate has_infinity __RW_INIT(false);
static const bool _RWSTDExportTemplate has_quiet_NaN __RW_INIT(false);
static const bool _RWSTDExportTemplate has_signaling_NaN __RW_INIT(false);
static const float_denorm_style _RWSTDExportTemplate has_denorm __RW_INIT(denorm_absent);
static const bool _RWSTDExportTemplate has_denorm_loss __RW_INIT(false);
static inline short _RWSTDExportTemplate infinity () _RWSTD_INLINE_NO_THROW { return 0; }
static inline short _RWSTDExportTemplate quiet_NaN () _RWSTD_INLINE_NO_THROW { return 0; }
static inline short _RWSTDExportTemplate signaling_NaN () _RWSTD_INLINE_NO_THROW { return 0; }
static inline short _RWSTDExportTemplate denorm_min () _RWSTD_INLINE_NO_THROW { return min(); }
static const bool _RWSTDExportTemplate is_iec559 __RW_INIT(false);
static const bool _RWSTDExportTemplate is_bounded __RW_INIT(true);
static const bool _RWSTDExportTemplate is_modulo __RW_INIT(numeric_limits<int>::is_modulo);
static const bool _RWSTDExportTemplate traps __RW_INIT(false);
static const bool _RWSTDExportTemplate tinyness_before __RW_INIT(false);
static const float_round_style _RWSTDExportTemplate round_style __RW_INIT(round_toward_zero);
};
//
// Specialization for unsigned short.
//
_RWSTD_TEMPLATE
class _RWSTDExport numeric_limits<unsigned short>
{
public:
static const bool _RWSTDExportTemplate is_specialized __RW_INIT(true);
static inline unsigned short min () _RWSTD_INLINE_NO_THROW { return 0; }
static inline unsigned short max () _RWSTD_INLINE_NO_THROW { return USHRT_MAX; }
static const int _RWSTDExportTemplate digits __RW_INIT(CHAR_BIT*sizeof(unsigned short));
// static const int _RWSTDExportTemplate digits10 __RW_INIT(int(digits/3.321928095));
static const int _RWSTDExportTemplate digits10;
static const bool _RWSTDExportTemplate is_signed __RW_INIT(false);
static const bool _RWSTDExportTemplate is_integer __RW_INIT(true);
static const bool _RWSTDExportTemplate is_exact __RW_INIT(true);
static const int _RWSTDExportTemplate radix __RW_INIT(numeric_limits<int>::radix);
static inline unsigned short epsilon () _RWSTD_INLINE_NO_THROW { return 0; }
static inline unsigned short round_error () _RWSTD_INLINE_NO_THROW { return 0; }
static const int _RWSTDExportTemplate min_exponent __RW_INIT(0);
static const int _RWSTDExportTemplate min_exponent10 __RW_INIT(0);
static const int _RWSTDExportTemplate max_exponent __RW_INIT(0);
static const int _RWSTDExportTemplate max_exponent10 __RW_INIT(0);
static const bool _RWSTDExportTemplate has_infinity __RW_INIT(false);
static const bool _RWSTDExportTemplate has_quiet_NaN __RW_INIT(false);
static const bool _RWSTDExportTemplate has_signaling_NaN __RW_INIT(false);
static const float_denorm_style _RWSTDExportTemplate has_denorm __RW_INIT(denorm_absent);
static const bool _RWSTDExportTemplate has_denorm_loss __RW_INIT(false);
static inline unsigned short infinity () _RWSTD_INLINE_NO_THROW { return 0; }
static inline unsigned short quiet_NaN () _RWSTD_INLINE_NO_THROW { return 0; }
static inline unsigned short signaling_NaN () _RWSTD_INLINE_NO_THROW { return 0; }
static inline unsigned short denorm_min () _RWSTD_INLINE_NO_THROW { return min(); }
static const bool _RWSTDExportTemplate is_iec559 __RW_INIT(false);
static const bool _RWSTDExportTemplate is_bounded __RW_INIT(true);
static const bool _RWSTDExportTemplate is_modulo __RW_INIT(true);
static const bool _RWSTDExportTemplate traps __RW_INIT(false);
static const bool _RWSTDExportTemplate tinyness_before __RW_INIT(false);
static const float_round_style _RWSTDExportTemplate round_style __RW_INIT(round_toward_zero);
};
//
// Specialization for unsigned int.
//
_RWSTD_TEMPLATE
class _RWSTDExport numeric_limits<unsigned int>
{
public:
static const bool _RWSTDExportTemplate is_specialized __RW_INIT(true);
static inline unsigned int min () _RWSTD_INLINE_NO_THROW { return 0; }
static inline unsigned int max () _RWSTD_INLINE_NO_THROW { return UINT_MAX; }
static const int _RWSTDExportTemplate digits __RW_INIT(CHAR_BIT*sizeof(unsigned int));
// static const int _RWSTDExportTemplate digits10 __RW_INIT(int(digits/3.321928095));
static const int _RWSTDExportTemplate digits10;
static const bool _RWSTDExportTemplate is_signed __RW_INIT(false);
static const bool _RWSTDExportTemplate is_integer __RW_INIT(true);
static const bool _RWSTDExportTemplate is_exact __RW_INIT(true);
static const int _RWSTDExportTemplate radix __RW_INIT(numeric_limits<int>::radix);
static inline unsigned int epsilon () _RWSTD_INLINE_NO_THROW { return 0; }
static inline unsigned int round_error () _RWSTD_INLINE_NO_THROW { return 0; }
static const int _RWSTDExportTemplate min_exponent __RW_INIT(0);
static const int _RWSTDExportTemplate min_exponent10 __RW_INIT(0);
static const int _RWSTDExportTemplate max_exponent __RW_INIT(0);
static const int _RWSTDExportTemplate max_exponent10 __RW_INIT(0);
static const bool _RWSTDExportTemplate has_infinity __RW_INIT(false);
static const bool _RWSTDExportTemplate has_quiet_NaN __RW_INIT(false);
static const bool _RWSTDExportTemplate has_signaling_NaN __RW_INIT(false);
static const float_denorm_style _RWSTDExportTemplate has_denorm __RW_INIT(denorm_absent);
static const bool _RWSTDExportTemplate has_denorm_loss __RW_INIT(false);
static inline unsigned int infinity () _RWSTD_INLINE_NO_THROW { return 0; }
static inline unsigned int quiet_NaN () _RWSTD_INLINE_NO_THROW { return 0; }
static inline unsigned int signaling_NaN () _RWSTD_INLINE_NO_THROW { return 0; }
static inline unsigned int denorm_min () _RWSTD_INLINE_NO_THROW { return min(); }
static const bool _RWSTDExportTemplate is_iec559 __RW_INIT(false);
static const bool _RWSTDExportTemplate is_bounded __RW_INIT(true);
static const bool _RWSTDExportTemplate is_modulo __RW_INIT(true);
static const bool _RWSTDExportTemplate traps __RW_INIT(false);
static const bool _RWSTDExportTemplate tinyness_before __RW_INIT(false);
static const float_round_style _RWSTDExportTemplate round_style __RW_INIT(round_toward_zero);
};
//
// Specialization for long.
//
_RWSTD_TEMPLATE
class _RWSTDExport numeric_limits<long>
{
public:
static const bool _RWSTDExportTemplate is_specialized __RW_INIT(true);
static inline long min () _RWSTD_INLINE_NO_THROW { return LONG_MIN; }
static inline long max () _RWSTD_INLINE_NO_THROW { return LONG_MAX; }
static const int _RWSTDExportTemplate digits __RW_INIT(CHAR_BIT*sizeof(long)-1);
// static const int _RWSTDExportTemplate digits10 __RW_INIT(int(digits/3.321928095));
static const int _RWSTDExportTemplate digits10;
static const bool _RWSTDExportTemplate is_signed __RW_INIT(true);
static const bool _RWSTDExportTemplate is_integer __RW_INIT(true);
static const bool _RWSTDExportTemplate is_exact __RW_INIT(true);
static const int _RWSTDExportTemplate radix __RW_INIT(numeric_limits<int>::radix);
static inline long epsilon () _RWSTD_INLINE_NO_THROW { return 0; }
static inline long round_error () _RWSTD_INLINE_NO_THROW { return 0; }
static const int _RWSTDExportTemplate min_exponent __RW_INIT(0);
static const int _RWSTDExportTemplate min_exponent10 __RW_INIT(0);
static const int _RWSTDExportTemplate max_exponent __RW_INIT(0);
static const int _RWSTDExportTemplate max_exponent10 __RW_INIT(0);
static const bool _RWSTDExportTemplate has_infinity __RW_INIT(false);
static const bool _RWSTDExportTemplate has_quiet_NaN __RW_INIT(false);
static const bool _RWSTDExportTemplate has_signaling_NaN __RW_INIT(false);
static const float_denorm_style _RWSTDExportTemplate has_denorm __RW_INIT(denorm_absent);
static const bool _RWSTDExportTemplate has_denorm_loss __RW_INIT(false);
static inline long infinity () _RWSTD_INLINE_NO_THROW { return 0; }
static inline long quiet_NaN () _RWSTD_INLINE_NO_THROW { return 0; }
static inline long signaling_NaN () _RWSTD_INLINE_NO_THROW { return 0; }
static inline long denorm_min () _RWSTD_INLINE_NO_THROW { return min(); }
static const bool _RWSTDExportTemplate is_iec559 __RW_INIT(false);
static const bool _RWSTDExportTemplate is_bounded __RW_INIT(true);
static const bool _RWSTDExportTemplate is_modulo __RW_INIT(numeric_limits<int>::is_modulo);
static const bool _RWSTDExportTemplate traps __RW_INIT(false);
static const bool _RWSTDExportTemplate tinyness_before __RW_INIT(false);
static const float_round_style _RWSTDExportTemplate round_style __RW_INIT(round_toward_zero);
};
//
// Specialization for unsigned long.
//
_RWSTD_TEMPLATE
class _RWSTDExport numeric_limits<unsigned long>
{
public:
static const bool _RWSTDExportTemplate is_specialized __RW_INIT(true);
static inline unsigned long min () _RWSTD_INLINE_NO_THROW { return 0; }
static inline unsigned long max () _RWSTD_INLINE_NO_THROW { return ULONG_MAX; }
static const int _RWSTDExportTemplate digits __RW_INIT(CHAR_BIT*sizeof(unsigned long));
// static const int _RWSTDExportTemplate digits10 __RW_INIT(int(digits/3.321928095));
static const int _RWSTDExportTemplate digits10;
static const bool _RWSTDExportTemplate is_signed __RW_INIT(false);
static const bool _RWSTDExportTemplate is_integer __RW_INIT(true);
static const bool _RWSTDExportTemplate is_exact __RW_INIT(true);
static const int _RWSTDExportTemplate radix __RW_INIT(numeric_limits<int>::radix);
static inline unsigned long epsilon () _RWSTD_INLINE_NO_THROW { return 0; }
static inline unsigned long round_error () _RWSTD_INLINE_NO_THROW { return 0; }
static const int _RWSTDExportTemplate min_exponent __RW_INIT(0);
static const int _RWSTDExportTemplate min_exponent10 __RW_INIT(0);
static const int _RWSTDExportTemplate max_exponent __RW_INIT(0);
static const int _RWSTDExportTemplate max_exponent10 __RW_INIT(0);
static const bool _RWSTDExportTemplate has_infinity __RW_INIT(false);
static const bool _RWSTDExportTemplate has_quiet_NaN __RW_INIT(false);
static const bool _RWSTDExportTemplate has_signaling_NaN __RW_INIT(false);
static const float_denorm_style _RWSTDExportTemplate has_denorm __RW_INIT(denorm_absent);
static const bool _RWSTDExportTemplate has_denorm_loss __RW_INIT(false);
static inline unsigned long infinity () _RWSTD_INLINE_NO_THROW { return 0; }
static inline unsigned long quiet_NaN () _RWSTD_INLINE_NO_THROW { return 0; }
static inline unsigned long signaling_NaN () _RWSTD_INLINE_NO_THROW { return 0; }
static inline unsigned long denorm_min () _RWSTD_INLINE_NO_THROW { return min(); }
static const bool _RWSTDExportTemplate is_iec559 __RW_INIT(false);
static const bool _RWSTDExportTemplate is_bounded __RW_INIT(true);
static const bool _RWSTDExportTemplate is_modulo __RW_INIT(true);
static const bool _RWSTDExportTemplate traps __RW_INIT(false);
static const bool _RWSTDExportTemplate tinyness_before __RW_INIT(false);
static const float_round_style _RWSTDExportTemplate round_style __RW_INIT(round_toward_zero);
};
//
// Specialization for char.
//
_RWSTD_TEMPLATE
class _RWSTDExport numeric_limits<char>
{
public:
static const bool _RWSTDExportTemplate is_specialized __RW_INIT(true);
static inline char min () _RWSTD_INLINE_NO_THROW { return CHAR_MIN; }
static inline char max () _RWSTD_INLINE_NO_THROW { return CHAR_MAX; }
static const bool _RWSTDExportTemplate is_signed __RW_INIT(CHAR_MAX == SCHAR_MAX ? true : false);
static const int _RWSTDExportTemplate digits __RW_INIT(is_signed ? CHAR_BIT*sizeof(char) -1 : CHAR_BIT*sizeof(char));
// static const int _RWSTDExportTemplate digits10 __RW_INIT(int(digits/3.321928095));
static const int _RWSTDExportTemplate digits10;
static const bool _RWSTDExportTemplate is_integer __RW_INIT(true);
static const bool _RWSTDExportTemplate is_exact __RW_INIT(true);
static const int _RWSTDExportTemplate radix __RW_INIT(numeric_limits<int>::radix);
static inline char epsilon () _RWSTD_INLINE_NO_THROW { return 0; }
static inline char round_error () _RWSTD_INLINE_NO_THROW { return 0; }
static const int _RWSTDExportTemplate min_exponent __RW_INIT(0);
static const int _RWSTDExportTemplate min_exponent10 __RW_INIT(0);
static const int _RWSTDExportTemplate max_exponent __RW_INIT(0);
static const int _RWSTDExportTemplate max_exponent10 __RW_INIT(0);
static const bool _RWSTDExportTemplate has_infinity __RW_INIT(false);
static const bool _RWSTDExportTemplate has_quiet_NaN __RW_INIT(false);
static const bool _RWSTDExportTemplate has_signaling_NaN __RW_INIT(false);
static const float_denorm_style _RWSTDExportTemplate has_denorm __RW_INIT(denorm_absent);
static const bool _RWSTDExportTemplate has_denorm_loss __RW_INIT(false);
static inline char infinity () _RWSTD_INLINE_NO_THROW { return 0; }
static inline char quiet_NaN () _RWSTD_INLINE_NO_THROW { return 0; }
static inline char signaling_NaN () _RWSTD_INLINE_NO_THROW { return 0; }
static inline char denorm_min () _RWSTD_INLINE_NO_THROW { return min(); }
static const bool _RWSTDExportTemplate is_iec559 __RW_INIT(false);
static const bool _RWSTDExportTemplate is_bounded __RW_INIT(true);
static const bool _RWSTDExportTemplate is_modulo __RW_INIT(is_signed ? numeric_limits<int>::is_modulo : true);
static const bool _RWSTDExportTemplate traps __RW_INIT(false);
static const bool _RWSTDExportTemplate tinyness_before __RW_INIT(false);
static const float_round_style _RWSTDExportTemplate round_style __RW_INIT(round_toward_zero);
};
//
// Specialization for unsigned char.
//
_RWSTD_TEMPLATE
class _RWSTDExport numeric_limits<unsigned char>
{
public:
static const bool _RWSTDExportTemplate is_specialized __RW_INIT(true);
static inline unsigned char min () _RWSTD_INLINE_NO_THROW { return 0; }
static inline unsigned char max () _RWSTD_INLINE_NO_THROW { return UCHAR_MAX; }
static const int _RWSTDExportTemplate digits __RW_INIT(CHAR_BIT*sizeof(unsigned char));
// static const int _RWSTDExportTemplate digits10 __RW_INIT(int(digits/3.321928095));
static const int _RWSTDExportTemplate digits10;
static const bool _RWSTDExportTemplate is_signed __RW_INIT(false);
static const bool _RWSTDExportTemplate is_integer __RW_INIT(true);
static const bool _RWSTDExportTemplate is_exact __RW_INIT(true);
static const int _RWSTDExportTemplate radix __RW_INIT(numeric_limits<int>::radix);
static inline unsigned char epsilon () _RWSTD_INLINE_NO_THROW { return 0; }
static inline unsigned char round_error () _RWSTD_INLINE_NO_THROW { return 0; }
static const int _RWSTDExportTemplate min_exponent __RW_INIT(0);
static const int _RWSTDExportTemplate min_exponent10 __RW_INIT(0);
static const int _RWSTDExportTemplate max_exponent __RW_INIT(0);
static const int _RWSTDExportTemplate max_exponent10 __RW_INIT(0);
static const bool _RWSTDExportTemplate has_infinity __RW_INIT(false);
static const bool _RWSTDExportTemplate has_quiet_NaN __RW_INIT(false);
static const bool _RWSTDExportTemplate has_signaling_NaN __RW_INIT(false);
static const float_denorm_style _RWSTDExportTemplate has_denorm __RW_INIT(denorm_absent);
static const bool _RWSTDExportTemplate has_denorm_loss __RW_INIT(false);
static inline unsigned char infinity () _RWSTD_INLINE_NO_THROW { return 0; }
static inline unsigned char quiet_NaN () _RWSTD_INLINE_NO_THROW { return 0; }
static inline unsigned char signaling_NaN () _RWSTD_INLINE_NO_THROW { return 0; }
static inline unsigned char denorm_min () _RWSTD_INLINE_NO_THROW { return min(); }
static const bool _RWSTDExportTemplate is_iec559 __RW_INIT(false);
static const bool _RWSTDExportTemplate is_bounded __RW_INIT(true);
static const bool _RWSTDExportTemplate is_modulo __RW_INIT(true);
static const bool _RWSTDExportTemplate traps __RW_INIT(false);
static const bool _RWSTDExportTemplate tinyness_before __RW_INIT(false);
static const float_round_style _RWSTDExportTemplate round_style __RW_INIT(round_toward_zero);
};
//
// Specialization for signed char.
//
_RWSTD_TEMPLATE
class _RWSTDExport numeric_limits<signed char>
{
public:
static const bool _RWSTDExportTemplate is_specialized __RW_INIT(true);
static inline signed char min () _RWSTD_INLINE_NO_THROW { return SCHAR_MIN; }
static inline signed char max () _RWSTD_INLINE_NO_THROW { return SCHAR_MAX; }
static const _RWSTDExportTemplate int digits __RW_INIT(CHAR_BIT*sizeof(signed char)-1);
// static const _RWSTDExportTemplate int digits10 __RW_INIT(int(digits/3.321928095));
static const _RWSTDExportTemplate int digits10;
static const bool _RWSTDExportTemplate is_signed __RW_INIT(true);
static const bool _RWSTDExportTemplate is_integer __RW_INIT(true);
static const bool _RWSTDExportTemplate is_exact __RW_INIT(true);
static const int _RWSTDExportTemplate radix __RW_INIT(numeric_limits<int>::radix);
static inline signed char epsilon () _RWSTD_INLINE_NO_THROW { return 0; }
static inline signed char round_error () _RWSTD_INLINE_NO_THROW { return 0; }
static const int _RWSTDExportTemplate min_exponent __RW_INIT(0);
static const int _RWSTDExportTemplate min_exponent10 __RW_INIT(0);
static const int _RWSTDExportTemplate max_exponent __RW_INIT(0);
static const int _RWSTDExportTemplate max_exponent10 __RW_INIT(0);
static const bool _RWSTDExportTemplate has_infinity __RW_INIT(false);
static const bool _RWSTDExportTemplate has_quiet_NaN __RW_INIT(false);
static const bool _RWSTDExportTemplate has_signaling_NaN __RW_INIT(false);
static const float_denorm_style _RWSTDExportTemplate has_denorm __RW_INIT(denorm_absent);
static const bool _RWSTDExportTemplate has_denorm_loss __RW_INIT(false);
static inline signed char infinity () _RWSTD_INLINE_NO_THROW { return 0; }
static inline signed char quiet_NaN () _RWSTD_INLINE_NO_THROW { return 0; }
static inline signed char signaling_NaN () _RWSTD_INLINE_NO_THROW { return 0; }
static inline signed char denorm_min () _RWSTD_INLINE_NO_THROW { return min(); }
static const bool _RWSTDExportTemplate is_iec559 __RW_INIT(false);
static const bool _RWSTDExportTemplate is_bounded __RW_INIT(true);
static const bool _RWSTDExportTemplate is_modulo __RW_INIT(numeric_limits<int>::is_modulo);
static const bool _RWSTDExportTemplate traps __RW_INIT(false);
static const bool _RWSTDExportTemplate tinyness_before __RW_INIT(false);
static const float_round_style _RWSTDExportTemplate round_style __RW_INIT(round_toward_zero);
};
#ifndef _RWSTD_NO_BOOL
//
// Specialization for bool.
//
_RWSTD_TEMPLATE
class _RWSTDExport numeric_limits<bool>
{
public:
static const bool _RWSTDExportTemplate is_specialized __RW_INIT(true);
static inline bool min () _RWSTD_INLINE_NO_THROW { return false; }
static inline bool max () _RWSTD_INLINE_NO_THROW { return true; }
static const _RWSTDExportTemplate int digits __RW_INIT(1);
static const _RWSTDExportTemplate int digits10 __RW_INIT(0);
static const bool _RWSTDExportTemplate is_signed __RW_INIT(false);
static const bool _RWSTDExportTemplate is_integer __RW_INIT(true);
static const bool _RWSTDExportTemplate is_exact __RW_INIT(true);
static const int _RWSTDExportTemplate radix __RW_INIT(numeric_limits<int>::radix);
static inline bool epsilon () _RWSTD_INLINE_NO_THROW { return 0; }
static inline bool round_error () _RWSTD_INLINE_NO_THROW { return 0; }
static const int _RWSTDExportTemplate min_exponent __RW_INIT(0);
static const int _RWSTDExportTemplate min_exponent10 __RW_INIT(0);
static const int _RWSTDExportTemplate max_exponent __RW_INIT(0);
static const int _RWSTDExportTemplate max_exponent10 __RW_INIT(0);
static const bool _RWSTDExportTemplate has_infinity __RW_INIT(false);
static const bool _RWSTDExportTemplate has_quiet_NaN __RW_INIT(false);
static const bool _RWSTDExportTemplate has_signaling_NaN __RW_INIT(false);
static const float_denorm_style _RWSTDExportTemplate has_denorm __RW_INIT(denorm_absent);
static const bool _RWSTDExportTemplate has_denorm_loss __RW_INIT(false);
static inline int infinity () _RWSTD_INLINE_NO_THROW { return 0; }
static inline int quiet_NaN () _RWSTD_INLINE_NO_THROW { return 0; }
static inline int signaling_NaN () _RWSTD_INLINE_NO_THROW { return 0; }
static inline int denorm_min () _RWSTD_INLINE_NO_THROW { return min(); }
static const bool _RWSTDExportTemplate is_iec559 __RW_INIT(false);
static const bool _RWSTDExportTemplate is_bounded __RW_INIT(true);
static const bool _RWSTDExportTemplate is_modulo __RW_INIT(false);
static const bool _RWSTDExportTemplate traps __RW_INIT(false);
static const bool _RWSTDExportTemplate tinyness_before __RW_INIT(false);
static const float_round_style _RWSTDExportTemplate round_style __RW_INIT(round_toward_zero);
};
#endif /*!_RWSTD_NO_BOOL*/
template <class T>
class _RWSTDExportTemplate numeric_limits
{
public:
static const bool is_specialized;
static inline T min () _RWSTD_INLINE_NO_THROW { return _RWSTD_STATIC_CAST(T,0); }
static inline T max () _RWSTD_INLINE_NO_THROW { return _RWSTD_STATIC_CAST(T,0); }
static const int digits;
static const int digits10;
static const bool is_signed;
static const bool is_integer;
static const bool is_exact;
static const int radix;
static inline T epsilon () _RWSTD_INLINE_NO_THROW { return _RWSTD_STATIC_CAST(T,0); }
static inline T round_error () _RWSTD_INLINE_NO_THROW { return _RWSTD_STATIC_CAST(T,0); }
static const int min_exponent;
static const int min_exponent10;
static const int max_exponent;
static const int max_exponent10;
static const bool has_infinity;
static const bool has_quiet_NaN;
static const bool has_signaling_NaN;
static const float_denorm_style has_denorm;
static const bool has_denorm_loss;
static inline T infinity () _RWSTD_INLINE_NO_THROW { return _RWSTD_STATIC_CAST(T,0); }
static inline T quiet_NaN () _RWSTD_INLINE_NO_THROW { return _RWSTD_STATIC_CAST(T,0); }
static inline T signaling_NaN () _RWSTD_INLINE_NO_THROW { return _RWSTD_STATIC_CAST(T,0); }
static inline T denorm_min () _RWSTD_INLINE_NO_THROW { return min(); }
static const bool is_iec559;
static const bool is_bounded;
static const bool is_modulo;
static const bool traps;
static const bool tinyness_before;
static const float_round_style round_style;
};
#ifndef _RWSTD_NO_TEMPLATE_SPECIALIZATION
template <class T>
const bool numeric_limits<T>::is_specialized = false;
template <class T>
const int numeric_limits<T>::digits = 0;
template <class T>
const int numeric_limits<T>::digits10 = 0;
template <class T>
const bool numeric_limits<T>::is_signed = false;
template <class T>
const bool numeric_limits<T>::is_integer = false;
template <class T>
const bool numeric_limits<T>::is_exact = false;
template <class T>
const int numeric_limits<T>::radix = 0;
template <class T>
const int numeric_limits<T>::min_exponent10 =0;
template <class T>
const int numeric_limits<T>::max_exponent10 = 0;
template <class T>
const int numeric_limits<T>::min_exponent = 0;
template <class T>
const int numeric_limits<T>::max_exponent = 0;
template <class T>
const bool numeric_limits<T>::has_infinity = false;
template <class T>
const bool numeric_limits<T>::has_quiet_NaN = false;
template <class T>
const bool numeric_limits<T>::has_signaling_NaN = false;
template <class T>
const bool numeric_limits<T>::is_iec559 = false;
template <class T>
const bool numeric_limits<T>::is_bounded = false;
template <class T>
const bool numeric_limits<T>::is_modulo = false;
template <class T>
const float_denorm_style numeric_limits<T>::has_denorm = denorm_absent;
template <class T>
const bool numeric_limits<T>::has_denorm_loss = false;
template <class T>
const bool numeric_limits<T>::traps = false;
template <class T>
const bool numeric_limits<T>::tinyness_before = false;
template <class T>
const float_round_style numeric_limits<T>::round_style = round_toward_zero;
#endif
#undef __RW_INIT
#ifndef _RWSTD_NO_NAMESPACE
}
#endif
#endif /*__STD_LIMITS*/
#pragma option pop
#endif /* __LIMITS_STL */