1 // (c) Copyright Fernando Luis Cacciola Carballal 2000-2004 2 // Use, modification, and distribution is subject to the Boost Software 3 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at 4 // http://www.boost.org/LICENSE_1_0.txt) 5 6 // See library home page at http://www.boost.org/libs/numeric/conversion 7 // 8 // Contact the author at: fernando_cacciola@hotmail.com 9 // 10 #ifndef BOOST_NUMERIC_CONVERSION_BOUNDS_DETAIL_FLC_12NOV2002_HPP 11 #define BOOST_NUMERIC_CONVERSION_BOUNDS_DETAIL_FLC_12NOV2002_HPP 12 13 #include "boost/limits.hpp" 14 #include "boost/config.hpp" 15 #include "boost/mpl/if.hpp" 16 17 namespace boost { namespace numeric { namespace boundsdetail 18 { 19 template<class N> 20 class Integral 21 { 22 typedef std::numeric_limits<N> limits ; 23 24 public : 25 lowest()26 static N lowest () { return limits::min BOOST_PREVENT_MACRO_SUBSTITUTION (); } highest()27 static N highest () { return limits::max BOOST_PREVENT_MACRO_SUBSTITUTION (); } smallest()28 static N smallest() { return static_cast<N>(1); } 29 } ; 30 31 template<class N> 32 class Float 33 { 34 typedef std::numeric_limits<N> limits ; 35 36 public : 37 lowest()38 static N lowest () { return static_cast<N>(-limits::max BOOST_PREVENT_MACRO_SUBSTITUTION ()) ; } highest()39 static N highest () { return limits::max BOOST_PREVENT_MACRO_SUBSTITUTION (); } smallest()40 static N smallest() { return limits::min BOOST_PREVENT_MACRO_SUBSTITUTION (); } 41 } ; 42 43 template<class N> 44 struct get_impl 45 { 46 typedef mpl::bool_< ::std::numeric_limits<N>::is_integer > is_int ; 47 48 typedef Integral<N> impl_int ; 49 typedef Float <N> impl_float ; 50 51 typedef typename mpl::if_<is_int,impl_int,impl_float>::type type ; 52 } ; 53 54 } } } // namespace boost::numeric::boundsdetail. 55 56 #endif 57 // 58 /////////////////////////////////////////////////////////////////////////////////////////////// 59