AK: Allow Checked += Checked, and other such operations

The overflow state from both Checkeds is OR'ed in the result.
This commit is contained in:
Andreas Kling 2021-01-30 13:49:03 +01:00
parent 6b7c96589b
commit dc17e01c99

View file

@ -1,6 +1,6 @@
/*
* Copyright (C) 2011-2019 Apple Inc. All rights reserved.
* Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
* Copyright (c) 2020-2021, Andreas Kling <kling@serenityos.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -186,24 +186,52 @@ public:
m_value /= other;
}
constexpr Checked& operator+=(const Checked& other)
{
m_overflow |= other.m_overflow;
add(other.value());
return *this;
}
constexpr Checked& operator+=(T other)
{
add(other);
return *this;
}
constexpr Checked& operator-=(const Checked& other)
{
m_overflow |= other.m_overflow;
sub(other.value());
return *this;
}
constexpr Checked& operator-=(T other)
{
sub(other);
return *this;
}
constexpr Checked& operator*=(const Checked& other)
{
m_overflow |= other.m_overflow;
mul(other.value());
return *this;
}
constexpr Checked& operator*=(T other)
{
mul(other);
return *this;
}
constexpr Checked& operator/=(const Checked& other)
{
m_overflow |= other.m_overflow;
div(other.value());
return *this;
}
constexpr Checked& operator/=(T other)
{
div(other);