diff --git a/Include/auROXTL/auBitsUtils.hpp b/Include/auROXTL/auBitsUtils.hpp index 4b7b6b6..06eac47 100644 --- a/Include/auROXTL/auBitsUtils.hpp +++ b/Include/auROXTL/auBitsUtils.hpp @@ -176,7 +176,7 @@ static auline bool AuBitScanReverse(AuUInt8 &index, T value) ret = 63 - ret; } } - else if constexpr (sizeof(T) == sizeof(unsigned int)) + else// if constexpr (sizeof(T) == sizeof(unsigned int)) { ret = __builtin_clz(static_cast(value)); if constexpr (sizeof(unsigned int) == 4) diff --git a/Include/auROXTL/auNumberUtils.hpp b/Include/auROXTL/auNumberUtils.hpp index 0ea5663..48cf90d 100644 --- a/Include/auROXTL/auNumberUtils.hpp +++ b/Include/auROXTL/auNumberUtils.hpp @@ -37,4 +37,37 @@ template constexpr const T AuPageRound(const T value, const T pageSize) { return value & ~(pageSize - 1); +} + +// TODO: out of order +#include "auBitsUtils.hpp" + +template +const T AuRoundUpPow2(const T value) +{ + if constexpr (AuIsSame_v) + { + return AuRoundUpPow2(value); + } + else + { + AuUInt8 ret; + AuBitScanReverse(ret, value); + return T(1) << (ret + T(1)); + } +} + +template +const T AuRoundDownPow2(const T value) +{ + if constexpr (AuIsSame_v) + { + return AuRoundDownPow2(value); + } + else + { + AuUInt8 ret; + AuBitScanReverse(ret, value); + return T(1) << ret; + } } \ No newline at end of file