diff -r 1b984dab8cec -r 72d4c9314c72 src/core/math_func.hpp --- a/src/core/math_func.hpp Mon Jun 30 21:31:23 2008 +0000 +++ b/src/core/math_func.hpp Wed Jul 09 13:32:13 2008 +0000 @@ -27,7 +27,8 @@ * @param b The second value * @return The greater value or a if equals */ -template static inline T max(const T a, const T b) +template +static FORCEINLINE T max(const T a, const T b) { return (a >= b) ? a : b; } @@ -42,7 +43,8 @@ * @param b The second value * @return The smaller value or b if equals */ -template static inline T min(const T a, const T b) +template +static FORCEINLINE T min(const T a, const T b) { return (a < b) ? a : b; } @@ -56,7 +58,7 @@ * @param b The second integer * @return The smaller value */ -static inline int min(const int a, const int b) +static FORCEINLINE int min(const int a, const int b) { return (a < b) ? a : b; } @@ -70,7 +72,7 @@ * @param b The second unsigned integer * @return The smaller value */ -static inline uint minu(const uint a, const uint b) +static FORCEINLINE uint minu(const uint a, const uint b) { return (a < b) ? a : b; } @@ -82,7 +84,8 @@ * @param a The value we want to unsign * @return The unsigned value */ -template static inline T abs(const T a) +template +static FORCEINLINE T abs(const T a) { return (a < (T)0) ? -a : a; } @@ -95,10 +98,31 @@ * @param n The base of the number we are searching * @return The smallest multiple of n equal or greater than x */ -template static inline T Align(const T x, uint n) +template +static FORCEINLINE T Align(const T x, uint n) { + assert((n & (n - 1)) == 0 && n != 0); n--; - return (T)((x + n) & ~(n)); + return (T)((x + n) & ~((T)n)); +} + +/** + * Return the smallest multiple of n equal or greater than x + * Applies to pointers only + * + * @note n must be a power of 2 + * @param x The min value + * @param n The base of the number we are searching + * @return The smallest multiple of n equal or greater than x + * @see Align() + */ + +assert_compile(sizeof(size_t) == sizeof(void *)); + +template +static FORCEINLINE T *AlignPtr(T *x, uint n) +{ + return (T *)Align((size_t)x, n); } /** @@ -117,7 +141,7 @@ * @returns A value between min and max which is closest to a. * @see ClampU(uint, uint, uint) */ -static inline int Clamp(const int a, const int min, const int max) +static FORCEINLINE int Clamp(const int a, const int min, const int max) { if (a <= min) return min; if (a >= max) return max; @@ -140,7 +164,7 @@ * @returns A value between min and max which is closest to a. * @see Clamp(int, int, int) */ -static inline uint ClampU(const uint a, const uint min, const uint max) +static FORCEINLINE uint ClampU(const uint a, const uint min, const uint max) { if (a <= min) return min; if (a >= max) return max; @@ -161,7 +185,7 @@ * @return The 64-bit value reduced to a 32-bit value * @see Clamp(int, int, int) */ -static inline int32 ClampToI32(const int64 a) +static FORCEINLINE int32 ClampToI32(const int64 a) { if (a <= INT32_MIN) return INT32_MIN; if (a >= INT32_MAX) return INT32_MAX; @@ -175,7 +199,7 @@ * @return The 64-bit value reduced to a 16-bit value * @see ClampU(uint, uint, uint) */ -static inline uint16 ClampToU16(const uint64 a) +static FORCEINLINE uint16 ClampToU16(const uint64 a) { return (uint16)(a <= UINT16_MAX ? a : UINT16_MAX); } @@ -187,7 +211,9 @@ * @param b The second scalar * @return The absolute difference between the given scalars */ -template static inline T Delta(const T a, const T b) { +template +static FORCEINLINE T Delta(const T a, const T b) +{ return (a < b) ? b - a : a - b; } @@ -203,7 +229,8 @@ * @param size The size of the interval * @return True if the value is in the interval, false else. */ -template static inline bool IsInsideBS(const T x, const uint base, const uint size) +template +static FORCEINLINE bool IsInsideBS(const T x, const uint base, const uint size) { return (uint)(x - base) < size; } @@ -218,7 +245,8 @@ * @param max The maximum of the interval * @see IsInsideBS() */ -template static inline bool IsInsideMM(const T x, const uint min, const uint max) +template +static FORCEINLINE bool IsInsideMM(const T x, const uint min, const uint max) { return (uint)(x - min) < (max - min); } @@ -228,7 +256,8 @@ * @param a variable to swap with b * @param b variable to swap with a */ -template void Swap(T& a, T& b) +template +static FORCEINLINE void Swap(T &a, T &b) { T t = a; a = b;