/*============================================================================= Copyright (c) 2011-2014 Bolero MURAKAMI https://github.com/bolero-MURAKAMI/Sprout Distributed under 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 SPROUT_MATH_LESS_HPP #define SPROUT_MATH_LESS_HPP #include #include #include #include #include namespace sprout { namespace math { namespace detail { template< typename FloatType1, typename FloatType2, typename sprout::enabler_if< std::is_floating_point::type>::value >::type = sprout::enabler > inline SPROUT_CONSTEXPR bool less(FloatType1 x, FloatType2 y) { return sprout::math::not_equal_to(x, y) && x < y; } template< typename IntType1, typename IntType2, typename sprout::enabler_if< std::is_integral::type>::value && (std::is_unsigned::value == std::is_unsigned::value) >::type = sprout::enabler > inline SPROUT_CONSTEXPR bool less(IntType1 x, IntType2 y) { return x < y; } template< typename IntType1, typename IntType2, typename sprout::enabler_if< std::is_integral::type>::value && std::is_signed::value && std::is_unsigned::value >::type = sprout::enabler > inline SPROUT_CONSTEXPR bool less(IntType1 x, IntType2 y) { typedef typename std::make_unsigned::type>::type type; return x < 0 ? true : static_cast(x) < static_cast(y) ; } template< typename IntType1, typename IntType2, typename sprout::enabler_if< std::is_integral::type>::value && std::is_unsigned::value && std::is_signed::value >::type = sprout::enabler > inline SPROUT_CONSTEXPR bool less(IntType1 x, IntType2 y) { typedef typename std::make_unsigned::type>::type type; return y < 0 ? false : static_cast(x) < static_cast(y) ; } } // namespace detail // // less // template< typename T, typename U, typename sprout::enabler_if::value && std::is_arithmetic::value>::type = sprout::enabler > inline SPROUT_CONSTEXPR bool less(T x, U y) { return sprout::math::detail::less(x, y); } } // namespace math } // namespace sprout #endif // #ifndef SPROUT_MATH_LESS_HPP