From ae438ca546ce3359cdf19bb3ea7ca682cddec153 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Thu, 26 Dec 2019 10:47:31 +0100 Subject: [PATCH] [poincare] DivisionQuotient, DivisionRemainder: add method to reduce on Integers --- poincare/include/poincare/division_quotient.h | 2 ++ poincare/include/poincare/division_remainder.h | 2 ++ poincare/src/division_quotient.cpp | 14 ++++++++------ poincare/src/division_remainder.cpp | 14 ++++++++------ 4 files changed, 20 insertions(+), 12 deletions(-) diff --git a/poincare/include/poincare/division_quotient.h b/poincare/include/poincare/division_quotient.h index 1979970b8..654059c1b 100644 --- a/poincare/include/poincare/division_quotient.h +++ b/poincare/include/poincare/division_quotient.h @@ -2,6 +2,7 @@ #define POINCARE_DIVISION_QUOTIENT_H #include +#include namespace Poincare { @@ -44,6 +45,7 @@ public: // Expression Expression shallowReduce(Context * context); + static Expression Reduce(const Integer & a, const Integer & b); }; } diff --git a/poincare/include/poincare/division_remainder.h b/poincare/include/poincare/division_remainder.h index b8c71649e..5fcfc7271 100644 --- a/poincare/include/poincare/division_remainder.h +++ b/poincare/include/poincare/division_remainder.h @@ -3,6 +3,7 @@ #include #include +#include namespace Poincare { @@ -46,6 +47,7 @@ public: // Expression Expression shallowReduce(Context * context); + static Expression Reduce(const Integer & a, const Integer & b); }; } diff --git a/poincare/src/division_quotient.cpp b/poincare/src/division_quotient.cpp index 5fd01d059..efa252e9d 100644 --- a/poincare/src/division_quotient.cpp +++ b/poincare/src/division_quotient.cpp @@ -68,16 +68,18 @@ Expression DivisionQuotient::shallowReduce(Context * context) { Integer a = r0.signedIntegerNumerator(); Integer b = r1.signedIntegerNumerator(); + Expression result = Reduce(a, b); + replaceWithInPlace(result); + return result; +} + +Expression DivisionQuotient::Reduce(const Integer & a, const Integer & b) { if (b.isZero()) { - Expression result = Infinity::Builder(a.isNegative()); - replaceWithInPlace(result); - return result; + return Infinity::Builder(a.isNegative()); } Integer result = Integer::Division(a, b).quotient; assert(!result.isOverflow()); - Expression rationalResult = Rational::Builder(result); - replaceWithInPlace(rationalResult); - return rationalResult; + return Rational::Builder(result); } } diff --git a/poincare/src/division_remainder.cpp b/poincare/src/division_remainder.cpp index d5a3eb35c..c235c7000 100644 --- a/poincare/src/division_remainder.cpp +++ b/poincare/src/division_remainder.cpp @@ -69,16 +69,18 @@ Expression DivisionRemainder::shallowReduce(Context * context) { Integer a = r0.signedIntegerNumerator(); Integer b = r1.signedIntegerNumerator(); + Expression result = Reduce(a, b); + replaceWithInPlace(result); + return result; +} + +Expression DivisionRemainder::Reduce(const Integer & a, const Integer & b) { if (b.isZero()) { - Expression result = Undefined::Builder(); - replaceWithInPlace(result); - return result; + return Undefined::Builder(); } Integer result = Integer::Division(a, b).remainder; assert(!result.isOverflow()); - Expression rationalResult = Rational::Builder(result); - replaceWithInPlace(rationalResult); - return rationalResult; + return Rational::Builder(result); } }