Chris@16: // Copyright (c) 2001-2011 Hartmut Kaiser Chris@16: // 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: #if !defined(BOOST_SPIRIT_NUMERIC_TRAITS_JAN_07_2011_0722AM) Chris@16: #define BOOST_SPIRIT_NUMERIC_TRAITS_JAN_07_2011_0722AM Chris@16: Chris@16: #if defined(_MSC_VER) Chris@16: #pragma once Chris@16: #endif Chris@16: Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: namespace boost { namespace spirit { namespace traits Chris@16: { Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: // Determine if T is a boolean type Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: template Chris@16: struct is_bool : mpl::false_ {}; Chris@16: Chris@16: template Chris@16: struct is_bool : is_bool {}; Chris@16: Chris@16: template <> Chris@16: struct is_bool : mpl::true_ {}; Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: // Determine if T is a signed integer type Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: template Chris@16: struct is_int : mpl::false_ {}; Chris@16: Chris@16: template Chris@16: struct is_int : is_int {}; Chris@16: Chris@16: template <> Chris@16: struct is_int : mpl::true_ {}; Chris@16: Chris@16: template <> Chris@16: struct is_int : mpl::true_ {}; Chris@16: Chris@16: template <> Chris@16: struct is_int : mpl::true_ {}; Chris@16: Chris@16: #ifdef BOOST_HAS_LONG_LONG Chris@16: template <> Chris@16: struct is_int : mpl::true_ {}; Chris@16: #endif Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: // Determine if T is an unsigned integer type Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: template Chris@16: struct is_uint : mpl::false_ {}; Chris@16: Chris@16: template Chris@16: struct is_uint : is_uint {}; Chris@16: Chris@16: #if !defined(BOOST_NO_INTRINSIC_WCHAR_T) Chris@16: template <> Chris@16: struct is_uint : mpl::true_ {}; Chris@16: #endif Chris@16: Chris@16: template <> Chris@16: struct is_uint : mpl::true_ {}; Chris@16: Chris@16: template <> Chris@16: struct is_uint : mpl::true_ {}; Chris@16: Chris@16: #ifdef BOOST_HAS_LONG_LONG Chris@16: template <> Chris@16: struct is_uint : mpl::true_ {}; Chris@16: #endif Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: // Determine if T is a floating point type Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: template Chris@16: struct is_real : mpl::false_ {}; Chris@16: Chris@16: template Chris@16: struct is_real : is_uint {}; Chris@16: Chris@16: template <> Chris@16: struct is_real : mpl::true_ {}; Chris@16: Chris@16: template <> Chris@16: struct is_real : mpl::true_ {}; Chris@16: Chris@16: template <> Chris@16: struct is_real : mpl::true_ {}; Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: // customization points for numeric operations Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: template Chris@16: struct absolute_value; Chris@16: Chris@16: template Chris@16: struct is_negative; Chris@16: Chris@16: template Chris@16: struct is_zero; Chris@16: Chris@16: template Chris@16: struct pow10_helper; Chris@16: Chris@16: template Chris@16: struct is_nan; Chris@16: Chris@16: template Chris@16: struct is_infinite; Chris@101: Chris@16: template Chris@101: struct check_overflow : mpl::false_ {}; Chris@101: Chris@16: template Chris@101: struct check_overflow::is_integral>::type> Chris@101: : mpl::true_ {}; Chris@16: }}} Chris@16: Chris@16: #endif