Convert Rational::Mod to use %= and % operator overrides

This commit is contained in:
Josh Koon 2019-02-21 10:55:04 -08:00
commit 34b27977f6
3 changed files with 29 additions and 22 deletions

View file

@ -183,6 +183,29 @@ namespace CalcEngine
return *this; 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) Rational operator+(Rational lhs, Rational const& rhs)
{ {
lhs += rhs; lhs += rhs;
@ -207,27 +230,10 @@ namespace CalcEngine
return lhs; return lhs;
} }
Rational Rational::Mod(Rational const& rhs) const Rational operator%(Rational lhs, Rational const& rhs)
{ {
PRAT lhsRat = this->ToPRAT(); lhs %= rhs;
PRAT rhsRat = rhs.ToPRAT(); return lhs;
try
{
modrat(&lhsRat, rhsRat);
destroyrat(rhsRat);
}
catch (DWORD error)
{
destroyrat(lhsRat);
destroyrat(rhsRat);
throw(error);
}
Rational result = Rational{ lhsRat };
destroyrat(lhsRat);
return result;
} }
Rational Rational::Lsh(Rational const& rhs, int32_t precision) const Rational Rational::Lsh(Rational const& rhs, int32_t precision) const

View file

@ -114,7 +114,7 @@ CalcEngine::Rational CCalcEngine::DoOperation(int operation, CalcEngine::Rationa
else else
{ {
iFinalSign = iNumeratorSign; iFinalSign = iNumeratorSign;
result = result.Mod(temp); result %= temp;
} }
if (m_fIntegerMode && iFinalSign == -1) if (m_fIntegerMode && iFinalSign == -1)

View file

@ -34,12 +34,13 @@ namespace CalcEngine
Rational& operator-=(Rational const& rhs); Rational& operator-=(Rational const& rhs);
Rational& operator*=(Rational const& rhs); 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); 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 Lsh(Rational const& r, int32_t precision) const;
Rational Rsh(Rational const& r, int32_t precision) const; Rational Rsh(Rational const& r, int32_t precision) const;