Go to the documentation of this file.
21 static inline T
abs(
const T a)
23 return (a < (T)0) ? -a : a;
35 static inline T
Align(
const T x, uint n)
37 assert((n & (n - 1)) == 0 && n != 0);
39 return (T)((x + n) & ~((T)n));
55 static_assert(
sizeof(
size_t) ==
sizeof(
void *));
56 return reinterpret_cast<T *
>(
Align((
size_t)x, n));
77 static inline T
Clamp(
const T a,
const T min,
const T max)
80 if (a <= min)
return min;
81 if (a >= max)
return max;
101 static inline int Clamp(
const int a,
const int min,
const int max)
103 return Clamp<int>(a, min, max);
122 static inline uint
ClampU(
const uint a,
const uint min,
const uint max)
124 return Clamp<uint>(a, min, max);
143 return static_cast<int32
>(Clamp<int64>(a, INT32_MIN, INT32_MAX));
159 return static_cast<uint16
>(std::min(a,
static_cast<uint64
>(UINT16_MAX)));
169 template <
typename T>
170 static inline T
Delta(
const T a,
const T b)
172 return (a < b) ? b - a : a - b;
187 template <
typename T>
188 static inline bool IsInsideBS(
const T x,
const size_t base,
const size_t size)
190 return (
size_t)(x - base) < size;
203 template <
typename T>
204 static constexpr
inline bool IsInsideMM(
const T x,
const size_t min,
const size_t max) noexcept
206 return (
size_t)(x - min) < (max - min);
214 template <
typename T>
215 static inline void Swap(T &a, T &b)
241 return i * 101 >> 16;
256 return (a + b - 1) / b;
265 static inline uint
Ceil(uint a, uint b)
280 return (a +
static_cast<int>(b) / 2) /
static_cast<int>(b);
283 return (a - (
static_cast<int>(b) - 1) / 2) /
static_cast<int>(b);
295 const int _b =
static_cast<int>(b);
297 return (a + _b - 1) / _b;
300 return (a - _b + 1) / _b;
static constexpr bool IsInsideMM(const T x, const size_t min, const size_t max) noexcept
Checks if a value is in 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 uint ClampU(const uint a, const uint min, const uint max)
Clamp an unsigned integer between an interval.
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 Align(const T x, uint n)
Return the smallest multiple of n equal or greater than x.
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 int DivAwayFromZero(int a, uint b)
Computes (a / b) rounded away from zero.
static int RoundDivSU(int a, uint b)
Computes round(a / b) for signed a and unsigned b.
static T Clamp(const T a, const T min, const T max)
Clamp a value between an interval.
uint32 IntSqrt(uint32 num)
Compute the integer square root.
static T abs(const T a)
Returns the absolute value of (scalar) variable.
static uint Ceil(uint a, uint b)
Computes ceil(a / b) * b for non-negative a and b.
static uint ToPercent16(uint i)
Converts a "fract" value 0..65535 to "percent" value 0..100.
static uint16 ClampToU16(const uint64 a)
Reduce an unsigned 64-bit int to an unsigned 16-bit one.
static uint CeilDiv(uint a, uint b)
Computes ceil(a / b) for non-negative a and b.
int GreatestCommonDivisor(int a, int b)
Compute greatest common divisor (gcd) of a and b.
static void Swap(T &a, T &b)
Type safe swap operation.
static T * AlignPtr(T *x, uint n)
Return the smallest multiple of n equal or greater than x Applies to pointers only.
static T Delta(const T a, const T b)
Returns the (absolute) difference between two (scalar) variables.
int DivideApprox(int a, int b)
Deterministic approximate division.