diff options
Diffstat (limited to 'src/common/alignment.h')
| -rw-r--r-- | src/common/alignment.h | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/common/alignment.h b/src/common/alignment.h index 0057052af..fc5c26898 100644 --- a/src/common/alignment.h +++ b/src/common/alignment.h | |||
| @@ -12,7 +12,9 @@ namespace Common { | |||
| 12 | 12 | ||
| 13 | template <typename T> | 13 | template <typename T> |
| 14 | requires std::is_integral_v<T> | 14 | requires std::is_integral_v<T> |
| 15 | [[nodiscard]] constexpr T AlignUp(T value, size_t size) { | 15 | [[nodiscard]] constexpr T AlignUp(T value_, size_t size) { |
| 16 | using U = typename std::make_unsigned_t<T>; | ||
| 17 | auto value{static_cast<U>(value_)}; | ||
| 16 | auto mod{static_cast<T>(value % size)}; | 18 | auto mod{static_cast<T>(value % size)}; |
| 17 | value -= mod; | 19 | value -= mod; |
| 18 | return static_cast<T>(mod == T{0} ? value : value + size); | 20 | return static_cast<T>(mod == T{0} ? value : value + size); |
| @@ -26,7 +28,9 @@ template <typename T> | |||
| 26 | 28 | ||
| 27 | template <typename T> | 29 | template <typename T> |
| 28 | requires std::is_integral_v<T> | 30 | requires std::is_integral_v<T> |
| 29 | [[nodiscard]] constexpr T AlignDown(T value, size_t size) { | 31 | [[nodiscard]] constexpr T AlignDown(T value_, size_t size) { |
| 32 | using U = typename std::make_unsigned_t<T>; | ||
| 33 | const auto value{static_cast<U>(value_)}; | ||
| 30 | return static_cast<T>(value - value % size); | 34 | return static_cast<T>(value - value % size); |
| 31 | } | 35 | } |
| 32 | 36 | ||