Sprout/sprout/cstdlib/abs.hpp
2012-10-06 00:58:56 +09:00

61 lines
1.3 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef SPROUT_CSTDLIB_ABS_HPP
#define SPROUT_CSTDLIB_ABS_HPP
#include <type_traits>
#include <sprout/config.hpp>
#include <sprout/type_traits/enabler_if.hpp>
namespace sprout {
// Copyright (C) 2011 RiSK (sscrisk)
// 7.20.6.1 abs<62>Clabs<62>CyÑ llabs ŠÖ<C5A0>
inline SPROUT_CONSTEXPR int
abs(int j) {
return j < 0 ? -j : j;
}
inline SPROUT_CONSTEXPR long
labs(long j) {
return j < 0 ? -j : j;
}
inline SPROUT_CONSTEXPR long long
llabs(long long j) {
return j < 0 ? -j : j;
}
inline SPROUT_CONSTEXPR long
abs(long j) {
return sprout::labs(j);
}
inline SPROUT_CONSTEXPR long long
abs(long long j) {
return sprout::llabs(j);
}
namespace {
template<
typename IntType,
typename sprout::enabler_if<
std::is_integral<IntType>::value && std::is_signed<IntType>::value
>::type = sprout::enabler
>
inline SPROUT_CONSTEXPR IntType
abs(IntType j) {
return j < 0 ? -j : j;
}
template<
typename IntType,
typename sprout::enabler_if<
std::is_integral<IntType>::value && std::is_unsigned<IntType>::value
>::type = sprout::enabler
>
inline SPROUT_CONSTEXPR IntType
abs(IntType j) {
return j;
}
} // anonymous-namespace
} // namespace sprout
#endif // #ifndef SPROUT_CSTDLIB_ABS_HPP