1#ifndef NW4R_UT_ALGORITHM_H
2#define NW4R_UT_ALGORITHM_H
3#include <nw4r/types_nw4r.h>
14template <
typename T>
inline T Max(T t1, T t2) {
15 return (t1 < t2) ? t2 : t1;
18template <
typename T>
inline T Min(T t1, T t2) {
19 return (t1 > t2) ? t2 : t1;
22template <
typename T>
inline T Clamp(T value, T min, T max) {
23 return value > max ? max : (value < min ? min : value);
26template <
typename T>
inline T Abs(T x) {
28 return x < 0 ? static_cast<T>(-x) : static_cast<T>(x);
31template <> f32
inline Abs(
register f32 x) {
48template <
typename T>
inline T BitExtract(T bits,
int pos,
int len) {
49 T mask = (1 << len) - 1;
50 return (bits >> pos) & mask;
53template <
typename T>
inline bool TestBit(T t,
int pos) {
54 return BitExtract<T>(t,
sizeof(T), pos);
62inline ulong GetIntPtr(
const void* pPtr) {
63 return reinterpret_cast<ulong
>(pPtr);
67inline const void* AddOffsetToPtr(
const void* pBase, T offset) {
68 return reinterpret_cast<const void*
>(GetIntPtr(pBase) + offset);
70template <
typename T>
inline void* AddOffsetToPtr(
void* pBase, T offset) {
71 return reinterpret_cast<void*
>(GetIntPtr(pBase) + offset);
74inline s32 GetOffsetFromPtr(
const void* pStart,
const void* pEnd) {
75 return static_cast<s32
>(GetIntPtr(pEnd) - GetIntPtr(pStart));
78inline int ComparePtr(
const void* pPtr1,
const void* pPtr2) {
79 return static_cast<int>(GetIntPtr(pPtr1) - GetIntPtr(pPtr2));
87template <
typename T>
inline T RoundUp(T t,
unsigned int alignment) {
88 return (alignment + t - 1) & ~(alignment - 1);
91template <
typename T>
inline void* RoundUp(T* pPtr,
unsigned int alignment) {
92 ulong value =
reinterpret_cast<ulong
>(pPtr);
93 ulong rounded = (alignment + value - 1) & ~(alignment - 1);
94 return reinterpret_cast<void*
>(rounded);
97template <
typename T>
inline T RoundDown(T t,
unsigned int alignment) {
98 return t & ~(alignment - 1);
101template <
typename T>
inline void* RoundDown(T* pPtr,
unsigned int alignment) {
102 ulong value =
reinterpret_cast<ulong
>(pPtr);
103 ulong rounded = value & ~(alignment - 1);
104 return reinterpret_cast<void*
>(rounded);
Debugging library which includes various utilities used by the rest of nw4r.