kaliber/src/base/misc.h

35 lines
925 B
C++

#ifndef BASE_MISC_H
#define BASE_MISC_H
#define CRASH *((int*)nullptr) = 0;
namespace base {
// ToDo: x86 has the bsr instruction.
inline int GetHighestBitPos(int value) {
return (0xFFFF0000 & value ? value &= 0xFFFF0000, 1 : 0) * 0x10 +
(0xFF00FF00 & value ? value &= 0xFF00FF00, 1 : 0) * 0x08 +
(0xF0F0F0F0 & value ? value &= 0xF0F0F0F0, 1 : 0) * 0x04 +
(0xCCCCCCCC & value ? value &= 0xCCCCCCCC, 1 : 0) * 0x02 +
(0xAAAAAAAA & value ? 1 : 0) * 0x01;
}
// Get the highest set bit in an integer number
inline int GetHighestBit(int value) {
return 0x1 << GetHighestBitPos(value);
}
// Check if the given integer is a power of two, ie if only one bit is set.
inline bool IsPow2(int value) {
return GetHighestBit(value) == value;
}
inline int RoundUpToPow2(int val) {
int i = GetHighestBit(val);
return val == i ? val : i << 1;
}
} // namespace base
#endif // BASE_MISC_H