From 6bf70a4bcb5cf95cc0c74c877c59154863d4e3c7 Mon Sep 17 00:00:00 2001 From: Jamie Reece Wilson Date: Sat, 18 Nov 2023 02:02:34 +0000 Subject: [PATCH] [+] AuRoundUpPow2 [+] AuRoundDownPow2 --- Include/auROXTL/auBitsUtils.hpp | 2 +- Include/auROXTL/auNumberUtils.hpp | 33 +++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) 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