Chris@16: Chris@16: // Copyright 2005-2009 Daniel James. Chris@16: // Distributed under the Boost Software License, Version 1.0. (See accompanying Chris@16: // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: // Chris@16: // On some platforms std::limits gives incorrect values for long double. Chris@16: // This tries to work around them. Chris@16: Chris@16: #if !defined(BOOST_FUNCTIONAL_HASH_DETAIL_LIMITS_HEADER) Chris@16: #define BOOST_FUNCTIONAL_HASH_DETAIL_LIMITS_HEADER Chris@16: Chris@101: #include Chris@101: #if defined(BOOST_HAS_PRAGMA_ONCE) Chris@101: #pragma once Chris@16: #endif Chris@16: Chris@16: #include Chris@16: Chris@16: // On OpenBSD, numeric_limits is not reliable for long doubles, but Chris@16: // the macros defined in are and support long double when STLport Chris@16: // doesn't. Chris@16: Chris@16: #if defined(__OpenBSD__) || defined(_STLP_NO_LONG_DOUBLE) Chris@16: #include Chris@16: #endif Chris@16: Chris@16: namespace boost Chris@16: { Chris@16: namespace hash_detail Chris@16: { Chris@16: template Chris@16: struct limits : std::numeric_limits {}; Chris@16: Chris@16: #if defined(__OpenBSD__) || defined(_STLP_NO_LONG_DOUBLE) Chris@16: template <> Chris@16: struct limits Chris@16: : std::numeric_limits Chris@16: { Chris@16: static long double epsilon() { Chris@16: return LDBL_EPSILON; Chris@16: } Chris@16: Chris@16: static long double (max)() { Chris@16: return LDBL_MAX; Chris@16: } Chris@16: Chris@16: static long double (min)() { Chris@16: return LDBL_MIN; Chris@16: } Chris@16: Chris@16: BOOST_STATIC_CONSTANT(int, digits = LDBL_MANT_DIG); Chris@16: BOOST_STATIC_CONSTANT(int, max_exponent = LDBL_MAX_EXP); Chris@16: BOOST_STATIC_CONSTANT(int, min_exponent = LDBL_MIN_EXP); Chris@16: #if defined(_STLP_NO_LONG_DOUBLE) Chris@16: BOOST_STATIC_CONSTANT(int, radix = FLT_RADIX); Chris@16: #endif Chris@16: }; Chris@16: #endif // __OpenBSD__ Chris@16: } Chris@16: } Chris@16: Chris@16: #endif