From b4ea4d9dab39656d5b58702a4a87d4e97ae0ec50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9a=20Saviot?= Date: Fri, 7 Sep 2018 16:27:22 +0200 Subject: [PATCH] [poincare] uninline methods in Evaluation and subclasses --- poincare/include/poincare/complex.h | 2 +- poincare/include/poincare/evaluation.h | 4 +--- poincare/include/poincare/matrix_complex.h | 7 ++----- poincare/src/complex.cpp | 5 +++++ poincare/src/evaluation.cpp | 9 +++++++++ poincare/src/matrix_complex.cpp | 9 +++++++++ 6 files changed, 27 insertions(+), 9 deletions(-) diff --git a/poincare/include/poincare/complex.h b/poincare/include/poincare/complex.h index 0356b78de..414de4e8f 100644 --- a/poincare/include/poincare/complex.h +++ b/poincare/include/poincare/complex.h @@ -41,7 +41,7 @@ template class Complex : public Evaluation { public: Complex(ComplexNode * n) : Evaluation(n) {} - Complex(T a, T b = 0.0) : Complex(std::complex(a, b)) {} + Complex(T a, T b = 0.0); Complex(std::complex c); static Complex Undefined() { return Complex(NAN, NAN); diff --git a/poincare/include/poincare/evaluation.h b/poincare/include/poincare/evaluation.h index 85981c00a..bee05eed1 100644 --- a/poincare/include/poincare/evaluation.h +++ b/poincare/include/poincare/evaluation.h @@ -49,9 +49,7 @@ public: } /* Hierarchy */ - Evaluation childAtIndex(int i) const { - return Evaluation(static_cast *>(TreeByReference::childAtIndex(i).node())); - } + Evaluation childAtIndex(int i) const; typename Poincare::EvaluationNode::Type type() const { return node()->type(); } bool isUndefined() const { return node()->isUndefined(); } T toScalar() const { return node()->toScalar(); } diff --git a/poincare/include/poincare/matrix_complex.h b/poincare/include/poincare/matrix_complex.h index f3da6a383..2702bd175 100644 --- a/poincare/include/poincare/matrix_complex.h +++ b/poincare/include/poincare/matrix_complex.h @@ -56,12 +56,9 @@ class MatrixComplex : public Evaluation { friend class MatrixComplexNode; public: MatrixComplex(MatrixComplexNode * node) : Evaluation(node) {} - MatrixComplex() : Evaluation(TreePool::sharedPool()->createTreeNode >()) {} + MatrixComplex(); MatrixComplex(std::complex * operands, int numberOfRows, int numberOfColumns); - static MatrixComplex Undefined() { - std::complex undef = std::complex(NAN, NAN); - return MatrixComplex((std::complex *)&undef, 1, 1); - } + static MatrixComplex Undefined(); static MatrixComplex createIdentity(int dim); MatrixComplex inverse() const { return node()->inverse(); } MatrixComplex transpose() const { return node()->transpose(); } diff --git a/poincare/src/complex.cpp b/poincare/src/complex.cpp index 854b22ca1..f7330cf88 100644 --- a/poincare/src/complex.cpp +++ b/poincare/src/complex.cpp @@ -105,6 +105,9 @@ Expression ComplexNode::complexToExpression(Preferences::ComplexFormat comple } } +template +Complex::Complex(T a, T b) : Complex(std::complex(a, b)) {} + template Complex::Complex(std::complex c) : Evaluation(TreePool::sharedPool()->createTreeNode>()) @@ -114,6 +117,8 @@ Complex::Complex(std::complex c) : template class ComplexNode; template class ComplexNode; +template Complex::Complex(float a, float b); +template Complex::Complex(double a, double b); template Complex::Complex(std::complex c); template Complex::Complex(std::complex c); diff --git a/poincare/src/evaluation.cpp b/poincare/src/evaluation.cpp index 6f5a5809b..b0be70e18 100644 --- a/poincare/src/evaluation.cpp +++ b/poincare/src/evaluation.cpp @@ -3,11 +3,20 @@ namespace Poincare { +template +Evaluation Evaluation::childAtIndex(int i) const { + TreeByReference c = TreeByReference::childAtIndex(i); + return static_cast &>(c); +} + template Expression Evaluation::complexToExpression(Preferences::ComplexFormat complexFormat) const { return node()->complexToExpression(complexFormat); } +template Evaluation Evaluation::childAtIndex(int i) const; +template Evaluation Evaluation::childAtIndex(int i) const; + template Expression Evaluation::complexToExpression(Preferences::ComplexFormat) const; template Expression Evaluation::complexToExpression(Preferences::ComplexFormat) const; diff --git a/poincare/src/matrix_complex.cpp b/poincare/src/matrix_complex.cpp index f31934ef0..46e55958b 100644 --- a/poincare/src/matrix_complex.cpp +++ b/poincare/src/matrix_complex.cpp @@ -128,6 +128,15 @@ MatrixComplex::MatrixComplex(std::complex * operands, int numberOfRows, in setDimensions(numberOfRows, numberOfColumns); } +template +MatrixComplex::MatrixComplex() : Evaluation(TreePool::sharedPool()->createTreeNode >()) {} + +template +MatrixComplex MatrixComplex::Undefined() { + std::complex undef = std::complex(NAN, NAN); + return MatrixComplex((std::complex *)&undef, 1, 1); +} + template MatrixComplex MatrixComplex::createIdentity(int dim) { MatrixComplex result;