OpenTTD Source
12.0-beta2
|
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 inline bool IsInsideMM(
const T x,
const size_t min,
const size_t max)
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 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.
static bool IsInsideMM(const T x, const size_t min, const size_t max)
Checks if a value is in 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.