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) {
|