mirror of https://github.com/auygun/kaliber.git
35 lines
925 B
C++
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
|