diff --git a/rtengine/rt_math.h b/rtengine/rt_math.h index a7cbbf301..32db8e92f 100644 --- a/rtengine/rt_math.h +++ b/rtengine/rt_math.h @@ -27,71 +27,57 @@ constexpr float RT_PI_F_2 = RT_PI_2; constexpr float RT_INFINITY_F = std::numeric_limits::infinity(); constexpr float RT_NAN_F = std::numeric_limits::quiet_NaN(); -template -inline _Tp SQR (_Tp x) +template +inline T SQR (T x) { // return std::pow(x,2); Slower than: return x * x; } -template -inline const _Tp& min(const _Tp& a, const _Tp& b) +template +inline const T& min(const T& a, const T& b) { return std::min(a, b); } -template -inline const _Tp& max(const _Tp& a, const _Tp& b) +template +inline const T& min(const T& a, const T& b, const ARGS&... args) +{ + return min(min(a, b), args...); +} + +template +inline const T& max(const T& a, const T& b) { return std::max(a, b); } +template +inline const T& max(const T& a, const T& b, const ARGS&... args) +{ + return max(max(a, b), args...); +} -template -inline const _Tp& LIM(const _Tp& a, const _Tp& b, const _Tp& c) +template +inline const T& LIM(const T& a, const T& b, const T& c) { return std::max(b, std::min(a, c)); } -template -inline _Tp LIM01(const _Tp& a) +template +inline T LIM01(const T& a) { - return std::max(_Tp(0), std::min(a, _Tp(1))); + return std::max(T(0), std::min(a, T(1))); } -template -inline _Tp CLIP(const _Tp& a) +template +inline T CLIP(const T& a) { - return LIM(a, static_cast<_Tp>(0), static_cast<_Tp>(MAXVAL)); + return LIM(a, static_cast(0), static_cast(MAXVAL)); } - -template -inline const _Tp& min(const _Tp& a, const _Tp& b, const _Tp& c) -{ - return std::min(c, std::min(a, b)); -} - -template -inline const _Tp& max(const _Tp& a, const _Tp& b, const _Tp& c) -{ - return std::max(c, std::max(a, b)); -} - -template -inline const _Tp& min(const _Tp& a, const _Tp& b, const _Tp& c, const _Tp& d) -{ - return std::min(d, std::min(c, std::min(a, b))); -} - -template -inline const _Tp& max(const _Tp& a, const _Tp& b, const _Tp& c, const _Tp& d) -{ - return std::max(d, std::max(c, std::max(a, b))); -} - -template -inline _Tp intp(_Tp a, _Tp b, _Tp c) +template +inline T intp(T a, T b, T c) { // calculate a * b + (1 - a) * c // following is valid: