summaryrefslogtreecommitdiffhomepage
path: root/compat/math.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'compat/math.hpp')
-rw-r--r--compat/math.hpp68
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;
}