AK: Add saturating addition and subtraction to Checked

This commit is contained in:
kleines Filmröllchen 2022-06-15 21:34:25 +02:00 committed by Linus Groh
parent 746d3c1131
commit 07d712ea00
Notes: sideshowbarker 2024-07-17 10:00:40 +09:00

View file

@ -199,6 +199,28 @@ public:
m_value /= other;
}
constexpr void saturating_sub(T other)
{
sub(other);
// Depending on whether other was positive or negative, we have to saturate to min or max.
if (m_overflow && other <= 0)
m_value = NumericLimits<T>::max();
else if (m_overflow)
m_value = NumericLimits<T>::min();
m_overflow = false;
}
constexpr void saturating_add(T other)
{
add(other);
// Depending on whether other was positive or negative, we have to saturate to max or min.
if (m_overflow && other >= 0)
m_value = NumericLimits<T>::max();
else if (m_overflow)
m_value = NumericLimits<T>::min();
m_overflow = false;
}
constexpr Checked& operator+=(Checked const& other)
{
m_overflow |= other.m_overflow;