diff --git a/src/core/math_func.hpp b/src/core/math_func.hpp --- a/src/core/math_func.hpp +++ b/src/core/math_func.hpp @@ -20,7 +20,7 @@ * @return The unsigned value */ template -inline T abs(const T a) +constexpr T abs(const T a) { return (a < (T)0) ? -a : a; } @@ -34,7 +34,7 @@ inline T abs(const T a) * @return The smallest multiple of n equal or greater than x */ template -inline T Align(const T x, uint n) +constexpr T Align(const T x, uint n) { assert((n & (n - 1)) == 0 && n != 0); n--; @@ -52,7 +52,7 @@ inline T Align(const T x, uint n) * @see Align() */ template -inline T *AlignPtr(T *x, uint n) +constexpr T *AlignPtr(T *x, uint n) { static_assert(sizeof(size_t) == sizeof(void *)); return reinterpret_cast(Align((size_t)x, n)); @@ -76,7 +76,7 @@ inline T *AlignPtr(T *x, uint n) * @see Clamp(int, int, int) */ template -inline T Clamp(const T a, const T min, const T max) +constexpr T Clamp(const T a, const T min, const T max) { assert(min <= max); if (a <= min) return min; @@ -99,7 +99,7 @@ inline T Clamp(const T a, const T min, c * @returns A value between min and max which is closest to a. */ template -inline T SoftClamp(const T a, const T min, const T max) +constexpr T SoftClamp(const T a, const T min, const T max) { if (min > max) { using U = std::make_unsigned_t; @@ -126,7 +126,7 @@ inline T SoftClamp(const T a, const T mi * @returns A value between min and max which is closest to a. * @see ClampU(uint, uint, uint) */ -inline int Clamp(const int a, const int min, const int max) +constexpr int Clamp(const int a, const int min, const int max) { return Clamp(a, min, max); } @@ -147,7 +147,7 @@ inline int Clamp(const int a, const int * @returns A value between min and max which is closest to a. * @see Clamp(int, int, int) */ -inline uint ClampU(const uint a, const uint min, const uint max) +constexpr uint ClampU(const uint a, const uint min, const uint max) { return Clamp(a, min, max); } @@ -231,7 +231,7 @@ constexpr To ClampTo(From value) * @return The absolute difference between the given scalars */ template -inline T Delta(const T a, const T b) +constexpr T Delta(const T a, const T b) { return (a < b) ? b - a : a - b; } @@ -249,7 +249,7 @@ inline T Delta(const T a, const T b) * @return True if the value is in the interval, false else. */ template -inline bool IsInsideBS(const T x, const size_t base, const size_t size) +constexpr bool IsInsideBS(const T x, const size_t base, const size_t size) { return (size_t)(x - base) < size; } @@ -265,7 +265,7 @@ inline bool IsInsideBS(const T x, const * @see IsInsideBS() */ template , std::is_base_of>, int> = 0> -static constexpr inline bool IsInsideMM(const T x, const size_t min, const size_t max) noexcept +constexpr bool IsInsideMM(const T x, const size_t min, const size_t max) noexcept { if constexpr (std::is_base_of_v) { return (size_t)(x.base() - min) < (max - min); @@ -280,7 +280,7 @@ static constexpr inline bool IsInsideMM( * @param b variable to swap with a */ template -inline void Swap(T &a, T &b) +constexpr void Swap(T &a, T &b) { T t = a; a = b; @@ -292,7 +292,7 @@ inline void Swap(T &a, T &b) * @param i value to convert, range 0..255 * @return value in range 0..100 */ -inline uint ToPercent8(uint i) +constexpr uint ToPercent8(uint i) { assert(i < 256); return i * 101 >> 8; @@ -303,7 +303,7 @@ inline uint ToPercent8(uint i) * @param i value to convert, range 0..65535 * @return value in range 0..100 */ -inline uint ToPercent16(uint i) +constexpr uint ToPercent16(uint i) { assert(i < 65536); return i * 101 >> 16; @@ -317,7 +317,7 @@ int DivideApprox(int a, int b); * @param b Denominator * @return Quotient, rounded up */ -inline uint CeilDiv(uint a, uint b) +constexpr uint CeilDiv(uint a, uint b) { return (a + b - 1) / b; } @@ -328,7 +328,7 @@ inline uint CeilDiv(uint a, uint b) * @param b Denominator * @return a rounded up to the nearest multiple of b. */ -inline uint Ceil(uint a, uint b) +constexpr uint Ceil(uint a, uint b) { return CeilDiv(a, b) * b; } @@ -339,7 +339,7 @@ inline uint Ceil(uint a, uint b) * @param b Denominator * @return Quotient, rounded to nearest */ -inline int RoundDivSU(int a, uint b) +constexpr int RoundDivSU(int a, uint b) { if (a > 0) { /* 0.5 is rounded to 1 */ @@ -356,7 +356,7 @@ inline int RoundDivSU(int a, uint b) * @param b Denominator * @return Quotient, rounded away from zero */ -inline int DivAwayFromZero(int a, uint b) +constexpr int DivAwayFromZero(int a, uint b) { const int _b = static_cast(b); if (a > 0) {