Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-31 10:02:38

0001 /*=============================================================================
0002     Copyright (c) 2001-2011 Hartmut Kaiser
0003 
0004     Distributed under the Boost Software License, Version 1.0. (See accompanying
0005     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
0006 ==============================================================================*/
0007 #if !defined(BOOST_SPIRIT_X3_NUMERIC_TRAITS_JAN_07_2011_0722AM)
0008 #define BOOST_SPIRIT_X3_NUMERIC_TRAITS_JAN_07_2011_0722AM
0009 
0010 #include <boost/config.hpp>
0011 #include <boost/mpl/bool.hpp>
0012 #include <limits>
0013 
0014 namespace boost { namespace spirit { namespace x3 { namespace traits
0015 {
0016     ///////////////////////////////////////////////////////////////////////////
0017     // Determine if T is a boolean type
0018     ///////////////////////////////////////////////////////////////////////////
0019     template <typename T>
0020     struct is_bool : mpl::false_ {};
0021 
0022     template <typename T>
0023     struct is_bool<T const> : is_bool<T> {};
0024 
0025     template <>
0026     struct is_bool<bool> : mpl::true_ {};
0027 
0028     ///////////////////////////////////////////////////////////////////////////
0029     // Determine if T is a signed integer type
0030     ///////////////////////////////////////////////////////////////////////////
0031     template <typename T>
0032     struct is_int : mpl::false_ {};
0033 
0034     template <typename T>
0035     struct is_int<T const> : is_int<T> {};
0036 
0037     template <>
0038     struct is_int<short> : mpl::true_ {};
0039 
0040     template <>
0041     struct is_int<int> : mpl::true_ {};
0042 
0043     template <>
0044     struct is_int<long> : mpl::true_ {};
0045 
0046 #ifdef BOOST_HAS_LONG_LONG
0047     template <>
0048     struct is_int<boost::long_long_type> : mpl::true_ {};
0049 #endif
0050 
0051     ///////////////////////////////////////////////////////////////////////////
0052     // Determine if T is an unsigned integer type
0053     ///////////////////////////////////////////////////////////////////////////
0054     template <typename T>
0055     struct is_uint : mpl::false_ {};
0056 
0057     template <typename T>
0058     struct is_uint<T const> : is_uint<T> {};
0059 
0060 #if !defined(BOOST_NO_INTRINSIC_WCHAR_T)
0061     template <>
0062     struct is_uint<unsigned short> : mpl::true_ {};
0063 #endif
0064 
0065     template <>
0066     struct is_uint<unsigned int> : mpl::true_ {};
0067 
0068     template <>
0069     struct is_uint<unsigned long> : mpl::true_ {};
0070 
0071 #ifdef BOOST_HAS_LONG_LONG
0072     template <>
0073     struct is_uint<boost::ulong_long_type> : mpl::true_ {};
0074 #endif
0075 
0076     ///////////////////////////////////////////////////////////////////////////
0077     // Determine if T is a floating point type
0078     ///////////////////////////////////////////////////////////////////////////
0079     template <typename T>
0080     struct is_real : mpl::false_ {};
0081 
0082     template <typename T>
0083     struct is_real<T const> : is_uint<T> {};
0084 
0085     template <>
0086     struct is_real<float> : mpl::true_ {};
0087 
0088     template <>
0089     struct is_real<double> : mpl::true_ {};
0090 
0091     template <>
0092     struct is_real<long double> : mpl::true_ {};
0093 
0094     ///////////////////////////////////////////////////////////////////////////
0095     // customization points for numeric operations
0096     ///////////////////////////////////////////////////////////////////////////
0097     template <typename T, typename Enable = void>
0098     struct absolute_value;
0099 
0100     template <typename T, typename Enable = void>
0101     struct is_negative;
0102 
0103     template <typename T, typename Enable = void>
0104     struct is_zero;
0105 
0106     template <typename T, typename Enable = void>
0107     struct pow10_helper;
0108 
0109     template <typename T, typename Enable = void>
0110     struct is_nan;
0111 
0112     template <typename T, typename Enable = void>
0113     struct is_infinite;
0114 
0115     template <typename T, typename Enable = void>
0116     struct check_overflow : mpl::bool_<std::numeric_limits<T>::is_bounded> {};
0117 }}}}
0118 
0119 #endif