Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-19 09:47:55

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