15 #define leading_zeroes(x) ((x) == 0 ? 32 : __builtin_clz(x)) 16 #define trailing_zeroes(x) ((x) == 0 ? 32 : __builtin_ctz(x)) 17 #define trailing_ones(x) __builtin_ctz(~(x)) 23 static inline uint32_t clz(uint32_t x)
26 if (_BitScanReverse(&result, x))
32 static inline uint32_t ctz(uint32_t x)
35 if (_BitScanForward(&result, x))
42 #define leading_zeroes(x) Fling::Internal::clz(x) 43 #define trailing_zeroes(x) Fling::Internal::ctz(x) 44 #define trailing_ones(x) Fling::Internal::ctz(~(x)) 52 const size_t mask = t_Align - 1;
53 assert((t_Align & mask) == 0);
54 return (t_Addr + mask) & ~mask;
62 const uintptr_t addr =
reinterpret_cast<uintptr_t
>(t_Ptr);
63 const uintptr_t addrAligned =
AlignAddress(addr, t_Align);
64 return reinterpret_cast<T*
>(addrAligned);
void * AlignedAlloc(size_t t_Size, size_t t_Alignment)
Definition: Memory.cpp:10
void AlignedFree(void *t_Data)
Definition: Memory.cpp:25
uintptr_t AlignAddress(uintptr_t t_Addr, size_t t_Align)
Definition: Memory.h:50
T * AlignPointer(T *t_Ptr, size_t t_Align)
Definition: Memory.h:60