From 34b27977f6790231a9be23d0e6d585a10e78c4a6 Mon Sep 17 00:00:00 2001 From: Josh Koon <45607479+joshkoon@users.noreply.github.com> Date: Thu, 21 Feb 2019 10:55:04 -0800 Subject: [PATCH] Convert Rational::Mod to use %= and % operator overrides --- src/CalcManager/CEngine/Rational.cpp | 46 ++++++++++++++----------- src/CalcManager/CEngine/scioper.cpp | 2 +- src/CalcManager/Header Files/Rational.h | 3 +- 3 files changed, 29 insertions(+), 22 deletions(-) diff --git a/src/CalcManager/CEngine/Rational.cpp b/src/CalcManager/CEngine/Rational.cpp index 5b292258..d8cb8514 100644 --- a/src/CalcManager/CEngine/Rational.cpp +++ b/src/CalcManager/CEngine/Rational.cpp @@ -183,6 +183,29 @@ namespace CalcEngine return *this; } + Rational& Rational::operator%=(Rational const& rhs) + { + PRAT lhsRat = this->ToPRAT(); + PRAT rhsRat = rhs.ToPRAT(); + + try + { + modrat(&lhsRat, rhsRat); + destroyrat(rhsRat); + } + catch (DWORD error) + { + destroyrat(lhsRat); + destroyrat(rhsRat); + throw(error); + } + + *this = Rational{ lhsRat }; + destroyrat(lhsRat); + + return *this; + } + Rational operator+(Rational lhs, Rational const& rhs) { lhs += rhs; @@ -207,27 +230,10 @@ namespace CalcEngine return lhs; } - Rational Rational::Mod(Rational const& rhs) const + Rational operator%(Rational lhs, Rational const& rhs) { - PRAT lhsRat = this->ToPRAT(); - PRAT rhsRat = rhs.ToPRAT(); - - try - { - modrat(&lhsRat, rhsRat); - destroyrat(rhsRat); - } - catch (DWORD error) - { - destroyrat(lhsRat); - destroyrat(rhsRat); - throw(error); - } - - Rational result = Rational{ lhsRat }; - destroyrat(lhsRat); - - return result; + lhs %= rhs; + return lhs; } Rational Rational::Lsh(Rational const& rhs, int32_t precision) const diff --git a/src/CalcManager/CEngine/scioper.cpp b/src/CalcManager/CEngine/scioper.cpp index c188d8d5..dfd85ea8 100644 --- a/src/CalcManager/CEngine/scioper.cpp +++ b/src/CalcManager/CEngine/scioper.cpp @@ -114,7 +114,7 @@ CalcEngine::Rational CCalcEngine::DoOperation(int operation, CalcEngine::Rationa else { iFinalSign = iNumeratorSign; - result = result.Mod(temp); + result %= temp; } if (m_fIntegerMode && iFinalSign == -1) diff --git a/src/CalcManager/Header Files/Rational.h b/src/CalcManager/Header Files/Rational.h index f2bfecde..4c112b26 100644 --- a/src/CalcManager/Header Files/Rational.h +++ b/src/CalcManager/Header Files/Rational.h @@ -34,12 +34,13 @@ namespace CalcEngine Rational& operator-=(Rational const& rhs); Rational& operator*=(Rational const& rhs); Rational& operator/=(Rational const& rhs); - Rational Mod(Rational const& rhs) const; + Rational& operator%=(Rational const& rhs); friend Rational operator+(Rational lhs, Rational const& rhs); friend Rational operator-(Rational lhs, Rational const& rhs); friend Rational operator*(Rational lhs, Rational const& rhs); friend Rational operator/(Rational lhs, Rational const& rhs); + friend Rational operator%(Rational lhs, Rational const& rhs); Rational Lsh(Rational const& r, int32_t precision) const; Rational Rsh(Rational const& r, int32_t precision) const;