From 4961b7c96733ee766f58bbd47f1daace76edd062 Mon Sep 17 00:00:00 2001 From: Josh Koon <45607479+joshkoon@users.noreply.github.com> Date: Thu, 21 Feb 2019 10:38:10 -0800 Subject: [PATCH] Convet Rational::Sub to - and -= operator overrides. --- src/CalcManager/CEngine/Rational.cpp | 26 +++++++++++++++---------- src/CalcManager/CEngine/scicomm.cpp | 2 +- src/CalcManager/CEngine/scidisp.cpp | 3 +-- src/CalcManager/CEngine/scifunc.cpp | 4 ++-- src/CalcManager/CEngine/scioper.cpp | 2 +- src/CalcManager/Header Files/Rational.h | 3 ++- 6 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/CalcManager/CEngine/Rational.cpp b/src/CalcManager/CEngine/Rational.cpp index b3412f71..e7523f73 100644 --- a/src/CalcManager/CEngine/Rational.cpp +++ b/src/CalcManager/CEngine/Rational.cpp @@ -114,20 +114,14 @@ namespace CalcEngine return *this; } - Rational operator+(Rational lhs, Rational const& rhs) - { - lhs += rhs; - return lhs; - } - - Rational Rational::Sub(Rational const& rhs, int32_t precision) const + Rational& Rational::operator-=(Rational const& rhs) { PRAT lhsRat = this->ToPRAT(); PRAT rhsRat = rhs.ToPRAT(); try { - subrat(&lhsRat, rhsRat, precision); + subrat(&lhsRat, rhsRat, RATIONAL_PRECISION); destroyrat(rhsRat); } catch (DWORD error) @@ -137,10 +131,22 @@ namespace CalcEngine throw(error); } - Rational result = Rational{ lhsRat }; + *this = Rational{ lhsRat }; destroyrat(lhsRat); - return result; + return *this; + } + + Rational operator+(Rational lhs, Rational const& rhs) + { + lhs += rhs; + return lhs; + } + + Rational operator-(Rational lhs, Rational const& rhs) + { + lhs -= rhs; + return lhs; } Rational Rational::Mul(Rational const& rhs, int32_t precision) const diff --git a/src/CalcManager/CEngine/scicomm.cpp b/src/CalcManager/CEngine/scicomm.cpp index 999e6571..478c6d7a 100644 --- a/src/CalcManager/CEngine/scicomm.cpp +++ b/src/CalcManager/CEngine/scicomm.cpp @@ -727,7 +727,7 @@ void CCalcEngine::ProcessCommandWorker(WPARAM wParam) { /* MMINUS subtracts m_currentVal to immediate memory and kills the "mem" */ /* indicator if the result is zero. */ - Rational result = m_memoryValue->Sub(m_currentVal, m_precision); + Rational result = *m_memoryValue - m_currentVal; m_memoryValue = make_unique(TruncateNumForIntMath(result)); break; diff --git a/src/CalcManager/CEngine/scidisp.cpp b/src/CalcManager/CEngine/scidisp.cpp index 511167fc..617d28d8 100644 --- a/src/CalcManager/CEngine/scidisp.cpp +++ b/src/CalcManager/CEngine/scidisp.cpp @@ -64,8 +64,7 @@ CalcEngine::Rational CCalcEngine::TruncateNumForIntMath(CalcEngine::Rational con if (result.IsLess(0, m_precision)) { // if negative make positive by doing a twos complement - result = -(result); - result = result.Sub(1, m_precision); + result = -(result) - 1; result = result.Not(m_chopNumbers[m_numwidth], m_precision); } diff --git a/src/CalcManager/CEngine/scifunc.cpp b/src/CalcManager/CEngine/scifunc.cpp index 43d0721f..fd44969d 100644 --- a/src/CalcManager/CEngine/scifunc.cpp +++ b/src/CalcManager/CEngine/scifunc.cpp @@ -182,14 +182,14 @@ CalcEngine::Rational CCalcEngine::SciCalcFunctions(CalcEngine::Rational const& r Rational degreeRat = Integer(rat, m_precision); - Rational minuteRat = rat.Sub(degreeRat, m_precision); + Rational minuteRat = rat - degreeRat; minuteRat = minuteRat.Mul(shftRat, m_precision); Rational secondRat = minuteRat; minuteRat = Integer(minuteRat, m_precision); - secondRat = secondRat.Sub(minuteRat, m_precision); + secondRat -= minuteRat; secondRat = secondRat.Mul(shftRat, m_precision); // diff --git a/src/CalcManager/CEngine/scioper.cpp b/src/CalcManager/CEngine/scioper.cpp index 484d531f..a2b87d48 100644 --- a/src/CalcManager/CEngine/scioper.cpp +++ b/src/CalcManager/CEngine/scioper.cpp @@ -69,7 +69,7 @@ CalcEngine::Rational CCalcEngine::DoOperation(int operation, CalcEngine::Rationa break; case IDC_SUB: - result = rhs.Sub(result, m_precision); + result = rhs - result; break; case IDC_MUL: diff --git a/src/CalcManager/Header Files/Rational.h b/src/CalcManager/Header Files/Rational.h index fb8de5ac..c7237305 100644 --- a/src/CalcManager/Header Files/Rational.h +++ b/src/CalcManager/Header Files/Rational.h @@ -31,12 +31,13 @@ namespace CalcEngine Rational operator-() const; Rational& operator+=(Rational const& rhs); - Rational Sub(Rational const& rhs, int32_t precision) const; + Rational& operator-=(Rational const& rhs); Rational Mul(Rational const& rhs, int32_t precision) const; Rational Div(Rational const& rhs, int32_t precision) const; Rational Mod(Rational const& rhs) const; 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;