diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2018-01-18 19:35:08 +0100 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2018-01-18 19:35:29 +0100 |
commit | d361f57c8064ce13a0478653050b169dc94e2e99 (patch) | |
tree | 73613b75bc4e6533455b6c3ad79c3fa39b8554fb /compat/math.hpp | |
parent | 2ab18fd01bc7c46043429511a3801846b998c749 (diff) |
compat/util: retire
Adjust usages.
Diffstat (limited to 'compat/math.hpp')
-rw-r--r-- | compat/math.hpp | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/compat/math.hpp b/compat/math.hpp new file mode 100644 index 00000000..5d80dace --- /dev/null +++ b/compat/math.hpp @@ -0,0 +1,74 @@ +#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) +{ + 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) +{ + return x < T(0) ? -1 : 1; +} |