diff options
Diffstat (limited to 'compat/math.hpp')
-rw-r--r-- | compat/math.hpp | 68 |
1 files changed, 5 insertions, 63 deletions
diff --git a/compat/math.hpp b/compat/math.hpp index 5d80dace..c5981cc2 100644 --- a/compat/math.hpp +++ b/compat/math.hpp @@ -1,74 +1,16 @@ #pragma once -#include "macros.hpp" - #include <cmath> #include <type_traits> -namespace util_detail { - -template<typename n> -inline auto clamp_float(n val, n min_, n max_) -{ - return std::fmin(std::fmax(val, min_), max_); -} - -template<typename t, typename n> -struct clamp final -{ - static inline auto clamp_(const n& val, const n& min_, const n& max_) - { - if (unlikely(val > max_)) - return max_; - if (unlikely(val < min_)) - return min_; - return val; - } -}; - -template<typename t> -struct clamp<float, t> -{ - static inline auto clamp_(float val, float min_, float max_) - { - return clamp_float(val, min_, max_); - } -}; - -template<typename t> -struct clamp<double, t> -{ - static inline auto clamp_(double val, double min_, double max_) - { - return clamp_float(val, min_, max_); - } -}; - -} // ns util_detail - -template<typename t, typename u, typename w> -inline auto clamp(const t& val, const u& min, const w& max) -{ - using tp = decltype(val + min + max); - return ::util_detail::clamp<std::decay_t<tp>, tp>::clamp_(val, min, max); -} - template<typename t> -inline int iround(const t& val) +inline auto iround(t val) -> std::enable_if_t<std::is_floating_point_v<std::decay_t<t>>, int> { - return int(std::round(val)); + return (int)std::round(val); } -template<typename t> -inline unsigned uround(const t& val) -{ - return std::round(std::fmax(t(0), val)); -} - -#include "macros.hpp" - -template <typename T> -static force_inline constexpr auto signum(T x) +template <typename t> +constexpr int signum(const t& x) { - return x < T(0) ? -1 : 1; + return x < t{0} ? -1 : 1; } |