From: <sv...@op...> - 2024-03-15 11:40:26
|
Author: manx Date: Fri Mar 15 12:40:10 2024 New Revision: 20336 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=20336 Log: Merged revision(s) 20330 from trunk/OpenMPT: [Ref] mpt/base/numeric.hpp: Add mpt::saturate_align_up. ........ Modified: branches/OpenMPT-1.31/ (props changed) branches/OpenMPT-1.31/src/mpt/base/numeric.hpp Modified: branches/OpenMPT-1.31/src/mpt/base/numeric.hpp ============================================================================== --- branches/OpenMPT-1.31/src/mpt/base/numeric.hpp Fri Mar 15 12:39:15 2024 (r20335) +++ branches/OpenMPT-1.31/src/mpt/base/numeric.hpp Fri Mar 15 12:40:10 2024 (r20336) @@ -80,6 +80,16 @@ return (x / target) * target; } +// rounds x up to multiples of target or saturation of T +template <typename T> +constexpr T saturate_align_up(T x, T target) { + if (x > (std::numeric_limits<T>::max() - (target - 1))) { + return std::numeric_limits<T>::max(); + } + T result = ((x + (target - 1)) / target) * target; + return result; +} + // Returns sign of a number (-1 for negative numbers, 1 for positive numbers, 0 for 0) template <class T> constexpr int signum(T value) { |