24 static inline T
max(
const T a,
const T b)
26 return (a >= b) ? a : b;
40 static inline T
min(
const T a,
const T b)
42 return (a < b) ? a : b;
54 static inline int min(
const int a,
const int b)
56 return min<int>(a, b);
68 static inline uint
minu(
const uint a,
const uint b)
70 return min<uint>(a, b);
81 static inline T
abs(
const T a)
83 return (a < (T)0) ? -a : a;
95 static inline T
Align(
const T x, uint n)
97 assert((n & (n - 1)) == 0 && n != 0);
99 return (T)((x + n) & ~((T)n));
112 template <
typename T>
115 assert_compile(
sizeof(
size_t) ==
sizeof(
void *));
116 return reinterpret_cast<T *
>(
Align((
size_t)x, n));
136 template <
typename T>
140 if (a <= min)
return min;
141 if (a >= max)
return max;
161 static inline int Clamp(
const int a,
const int min,
const int max)
163 return Clamp<int>(a,
min,
max);
182 static inline uint
ClampU(
const uint a,
const uint
min,
const uint
max)
184 return Clamp<uint>(a,
min,
max);
203 return static_cast<int32
>(Clamp<int64>(a, INT32_MIN, INT32_MAX));
219 return static_cast<uint16
>(min<uint64>(a,
static_cast<uint64
>(UINT16_MAX)));
229 template <
typename T>
230 static inline T
Delta(
const T a,
const T b)
232 return (a < b) ? b - a : a - b;
247 template <
typename T>
248 static inline bool IsInsideBS(
const T x,
const size_t base,
const size_t size)
250 return (
size_t)(x - base) < size;
263 template <
typename T>
266 return (
size_t)(x -
min) < (max - min);
274 template <
typename T>
275 static inline void Swap(T &a, T &b)
301 return i * 101 >> 16;
316 return (a + b - 1) / b;
325 static inline uint
Ceil(uint a, uint b)
340 return (a + static_cast<int>(b) / 2) /
static_cast<int>(b);
343 return (a - (static_cast<int>(b) - 1) / 2) / static_cast<int>(b);
355 const int _b =
static_cast<int>(b);
357 return (a + _b - 1) / _b;
360 return (a - _b + 1) / _b;
static void Swap(T &a, T &b)
Type safe swap operation.
static uint minu(const uint a, const uint b)
Returns the minimum of two unsigned integers.
int DivideApprox(int a, int b)
Deterministic approximate division.
static int DivAwayFromZero(int a, uint b)
Computes (a / b) rounded away from zero.
static T max(const T a, const T b)
Returns the maximum of two values.
static int RoundDivSU(int a, uint b)
Computes round(a / b) for signed a and unsigned b.
static bool IsInsideBS(const T x, const size_t base, const size_t size)
Checks if a value is between a window started at some base point.
static uint ClampU(const uint a, const uint min, const uint max)
Clamp an unsigned integer between an interval.
static bool IsInsideMM(const T x, const size_t min, const size_t max)
Checks if a value is in an interval.
uint32 IntSqrt(uint32 num)
Compute the integer square root.
static T Align(const T x, uint n)
Return the smallest multiple of n equal or greater than x.
static uint CeilDiv(uint a, uint b)
Computes ceil(a / b) for non-negative a and b.
static T * AlignPtr(T *x, uint n)
Return the smallest multiple of n equal or greater than x Applies to pointers only.
int LeastCommonMultiple(int a, int b)
Compute least common multiple (lcm) of arguments a and b, the smallest integer value that is a multip...
static T min(const T a, const T b)
Returns the minimum of two values.
static T Clamp(const T a, const T min, const T max)
Clamp a value between an interval.
static int32 ClampToI32(const int64 a)
Reduce a signed 64-bit int to a signed 32-bit one.
static uint ToPercent8(uint i)
Converts a "fract" value 0..255 to "percent" value 0..100.
static T abs(const T a)
Returns the absolute value of (scalar) variable.
static uint ToPercent16(uint i)
Converts a "fract" value 0..65535 to "percent" value 0..100.
static uint Ceil(uint a, uint b)
Computes ceil(a / b) * b for non-negative a and b.
static T Delta(const T a, const T b)
Returns the (absolute) difference between two (scalar) variables.
static uint16 ClampToU16(const uint64 a)
Reduce an unsigned 64-bit int to an unsigned 16-bit one.
int GreatestCommonDivisor(int a, int b)
Compute greatest common divisor (gcd) of a and b.