From 36925e08c1d410f830ec59e06e8cfc6a2b7dc42a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Thu, 19 Oct 2017 18:13:17 +0200 Subject: [PATCH] [poincare] Implement evaluate in Rational Change-Id: I8ef2b879ce3f61c0c33ad478f831202788ece532 --- poincare/include/poincare/rational.h | 5 +++-- poincare/src/rational.cpp | 12 ++++-------- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/poincare/include/poincare/rational.h b/poincare/include/poincare/rational.h index 9cf67a8ec..a79f485d0 100644 --- a/poincare/include/poincare/rational.h +++ b/poincare/include/poincare/rational.h @@ -39,8 +39,9 @@ public: private: ExpressionLayout * privateCreateLayout(FloatDisplayMode floatDisplayMode, ComplexFormat complexFormat) const override; int writeTextInBuffer(char * buffer, int bufferSize) const override; - Evaluation * privateEvaluate(SinglePrecision p, Context& context, AngleUnit angleUnit) const override; - Evaluation * privateEvaluate(DoublePrecision p, Context& context, AngleUnit angleUnit) const override; + Evaluation * privateEvaluate(SinglePrecision p, Context& context, AngleUnit angleUnit) const override { return templatedEvaluate(context, angleUnit); } + Evaluation * privateEvaluate(DoublePrecision p, Context& context, AngleUnit angleUnit) const override { return templatedEvaluate(context, angleUnit); } + template Evaluation * templatedEvaluate(Context& context, Expression::AngleUnit angleUnit) const; /* Sorting */ int compareToSameTypeExpression(const Expression * e) const override; diff --git a/poincare/src/rational.cpp b/poincare/src/rational.cpp index f82acd23a..bddd42d3e 100644 --- a/poincare/src/rational.cpp +++ b/poincare/src/rational.cpp @@ -104,14 +104,10 @@ int Rational::compareToSameTypeExpression(const Expression * e) const { return i1.compareTo(&i2); } -Evaluation * Rational::privateEvaluate(SinglePrecision p, Context& context, AngleUnit angleUnit) const { - // TODO: implement when needed, use Integer.privateEvaluate - return new Complex(Complex::Float(NAN)); -} - -Evaluation * Rational::privateEvaluate(DoublePrecision p, Context& context, AngleUnit angleUnit) const { - // TODO: implement when needed, use Integer.privateEvaluate - return new Complex(Complex::Float(NAN)); +template Evaluation * Rational::templatedEvaluate(Context& context, Expression::AngleUnit angleUnit) const { + T n = m_numerator.approximate(); + T d = m_denominator.approximate(); + return new Complex(Complex::Float(n/d)); } ExpressionLayout * Rational::privateCreateLayout(FloatDisplayMode floatDisplayMode, ComplexFormat complexFormat) const {