| // Copyright (c) 2009 John Maddock |
| // Use, modification and distribution are subject to the |
| // Boost Software License, Version 1.0. (See accompanying file |
| // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) |
| |
| #ifndef BOOST_MATH_ICONV_HPP |
| #define BOOST_MATH_ICONV_HPP |
| |
| #ifdef _MSC_VER |
| #pragma once |
| #endif |
| |
| #include <boost/math/special_functions/round.hpp> |
| #include <boost/type_traits/is_convertible.hpp> |
| |
| namespace boost { namespace math { namespace detail{ |
| |
| template <class T, class Policy> |
| inline int iconv_imp(T v, Policy const&, mpl::true_ const&) |
| { |
| return static_cast<int>(v); |
| } |
| |
| template <class T, class Policy> |
| inline int iconv_imp(T v, Policy const& pol, mpl::false_ const&) |
| { |
| return boost::math::iround(v); |
| } |
| |
| template <class T, class Policy> |
| inline int iconv(T v, Policy const& pol) |
| { |
| typedef typename boost::is_convertible<T, int>::type tag_type; |
| return iconv_imp(v, pol, tag_type()); |
| } |
| |
| |
| }}} // namespaces |
| |
| #endif // BOOST_MATH_ICONV_HPP |
| |