54 #define OJPH_COMPILER_MSVC
55 #elif (defined __GNUC__)
56 #define OJPH_COMPILER_GNUC
65 #ifdef OJPH_COMPILER_MSVC
72 #ifdef OJPH_COMPILER_MSVC
73 return (
ui32)__popcnt(val);
74 #elif (defined OJPH_COMPILER_GNUC)
75 return (
ui32)__builtin_popcount(val);
77 val -= ((val >> 1) & 0x55555555);
78 val = (((val >> 2) & 0x33333333) + (val & 0x33333333));
79 val = (((val >> 4) + val) & 0x0f0f0f0f);
82 return (
int)(val & 0x0000003f);
87 #ifdef OJPH_COMPILER_MSVC
88 #pragma intrinsic(_BitScanReverse)
92 #ifdef OJPH_COMPILER_MSVC
93 unsigned long result = 0;
94 _BitScanReverse(&result, val);
95 return 31 ^ (
ui32)result;
96 #elif (defined OJPH_COMPILER_GNUC)
97 return (
ui32)__builtin_clz(val);
109 #ifdef OJPH_COMPILER_MSVC
110 #pragma intrinsic(_BitScanForward)
114 #ifdef OJPH_COMPILER_MSVC
115 unsigned long result = 0;
116 _BitScanForward(&result, val);
118 #elif (defined OJPH_COMPILER_GNUC)
119 return (
ui32)__builtin_ctz(val);
133 #ifdef OJPH_COMPILER_MSVC
134 return (
si32)(val + (val >= 0.0f ? 0.5f : -0.5f));
135 #elif (defined OJPH_COMPILER_GNUC)
136 return (
si32)(val + (val >= 0.0f ? 0.5f : -0.5f));
138 return (
si32)round(val);
145 #ifdef OJPH_COMPILER_MSVC
147 #elif (defined OJPH_COMPILER_GNUC)
150 return (
si32)trunc(val);
167 template <
typename T,
int N>
177 template <
typename T,
int N>
179 intptr_t p =
reinterpret_cast<intptr_t
>(ptr);
182 return reinterpret_cast<T *
>(p);
188 #if (defined WIN32) || (defined _WIN32) || (defined _WIN64)
189 #define OJPH_OS_WINDOWS
190 #elif (defined __APPLE__)
191 #define OJPH_OS_APPLE
192 #elif (defined __linux)
193 #define OJPH_OS_LINUX
199 #ifdef OJPH_OS_WINDOWS
200 #define OJPH_EXPORT __declspec(dllexport)
const ui32 object_alignment
const ui32 byte_alignment
static si32 ojph_round(float val)
size_t calc_aligned_size(size_t size)
static ui32 population_count(ui32 val)
static si32 ojph_trunc(float val)
static ui32 count_trailing_zeros(ui32 val)
static ui32 count_leading_zeros(ui32 val)
const ui32 log_byte_alignment