1 /* Boost interval/limits.hpp template implementation file 2 * 3 * Copyright 2000 Jens Maurer 4 * Copyright 2002-2003 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion 5 * 6 * Distributed under the Boost Software License, Version 1.0. 7 * (See accompanying file LICENSE_1_0.txt or 8 * copy at http://www.boost.org/LICENSE_1_0.txt) 9 */ 10 11 #ifndef BOOST_NUMERIC_INTERVAL_LIMITS_HPP 12 #define BOOST_NUMERIC_INTERVAL_LIMITS_HPP 13 14 15 #include <boost/config.hpp> 16 #include <boost/limits.hpp> 17 #include <boost/numeric/interval/detail/interval_prototype.hpp> 18 19 namespace std { 20 21 template<class T, class Policies> 22 class numeric_limits<boost::numeric::interval<T, Policies> > 23 : public numeric_limits<T> 24 { 25 private: 26 typedef boost::numeric::interval<T, Policies> I; 27 typedef numeric_limits<T> bl; 28 public: BOOST_PREVENT_MACRO_SUBSTITUTION()29 static I min BOOST_PREVENT_MACRO_SUBSTITUTION () BOOST_NOEXCEPT_OR_NOTHROW { return I((bl::min)(), (bl::min)()); } BOOST_PREVENT_MACRO_SUBSTITUTION()30 static I max BOOST_PREVENT_MACRO_SUBSTITUTION () BOOST_NOEXCEPT_OR_NOTHROW { return I((bl::max)(), (bl::max)()); } epsilon()31 static I epsilon() BOOST_NOEXCEPT_OR_NOTHROW { return I(bl::epsilon(), bl::epsilon()); } 32 33 BOOST_STATIC_CONSTANT(float_round_style, round_style = round_indeterminate); 34 BOOST_STATIC_CONSTANT(bool, is_iec559 = false); 35 infinity()36 static I infinity () BOOST_NOEXCEPT_OR_NOTHROW { return I::whole(); } quiet_NaN()37 static I quiet_NaN() BOOST_NOEXCEPT_OR_NOTHROW { return I::empty(); } signaling_NaN()38 static I signaling_NaN() BOOST_NOEXCEPT_OR_NOTHROW 39 { return I(bl::signaling_NaN(), bl::signaling_Nan()); } denorm_min()40 static I denorm_min() BOOST_NOEXCEPT_OR_NOTHROW 41 { return I(bl::denorm_min(), bl::denorm_min()); } 42 private: 43 static I round_error(); // hide this on purpose, not yet implemented 44 }; 45 46 } // namespace std 47 48 49 #endif // BOOST_NUMERIC_INTERVAL_LIMITS_HPP 50