From 36a310830980e9d622a863d63ef8f58ef4b5e615 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Wed, 24 Jan 2018 15:12:46 +0100 Subject: [PATCH] [apps] Calculation: move implementation of ansExpression() from Calculation to CalculationStore --- apps/calculation/calculation.cpp | 16 ++-------------- apps/calculation/calculation.h | 3 +-- apps/calculation/calculation_store.cpp | 14 +++++++++++++- apps/calculation/calculation_store.h | 1 + 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/apps/calculation/calculation.cpp b/apps/calculation/calculation.cpp index d64202749..53f7ac877 100644 --- a/apps/calculation/calculation.cpp +++ b/apps/calculation/calculation.cpp @@ -64,10 +64,10 @@ void Calculation::reset() { tidy(); } -void Calculation::setContent(const char * c, Context * context, CalculationStore * calculationStore) { +void Calculation::setContent(const char * c, Context * context, Expression * ansExpression) { reset(); m_input = Expression::parse(c); - Expression::ReplaceSymbolWithExpression(&m_input, Symbol::SpecialSymbols::Ans, ansExpression(calculationStore, context)); + Expression::ReplaceSymbolWithExpression(&m_input, Symbol::SpecialSymbols::Ans, ansExpression); /* We do not store directly the text enter by the user but its serialization * to be able to compare it to the exact ouput text. */ m_input->writeTextInBuffer(m_inputText, sizeof(m_inputText)); @@ -192,16 +192,4 @@ bool Calculation::shouldDisplayApproximateOutput(Context * context) { return input()->isApproximate(*context); } -Expression * Calculation::ansExpression(CalculationStore * calculationStore, Context * context) { - if (calculationStore->numberOfCalculations() == 0) { - static Rational defaultExpression(0); - return &defaultExpression; - } - Calculation * lastCalculation = calculationStore->calculationAtIndex(calculationStore->numberOfCalculations()-1); - if (lastCalculation->input()->isApproximate(*context)) { - return lastCalculation->approximateOutput(context); - } - return lastCalculation->exactOutput(context); -} - } diff --git a/apps/calculation/calculation.h b/apps/calculation/calculation.h index 69b2ccf48..e926241b3 100644 --- a/apps/calculation/calculation.h +++ b/apps/calculation/calculation.h @@ -18,7 +18,7 @@ public: Calculation& operator=(Calculation&& other) = delete; /* c.reset() is the equivalent of c = Calculation() without copy assingment. */ void reset(); - void setContent(const char * c, Poincare::Context * context, CalculationStore * calculationStore); + void setContent(const char * c, Poincare::Context * context, Poincare::Expression * ansExpression); const char * inputText(); const char * exactOutputText(); const char * approximateOutputText(); @@ -33,7 +33,6 @@ public: bool shouldDisplayApproximateOutput(Poincare::Context * context); constexpr static int k_printedExpressionSize = 2*::TextField::maxBufferSize(); private: - Poincare::Expression * ansExpression(CalculationStore * calculationStore, Poincare::Context * context); /* Buffers holding text expressions have to be longer than the text written * by user (of maximum length TextField::maxBufferSize()) because when we * print an expression we add omitted signs (multiplications, parenthesis...) */ diff --git a/apps/calculation/calculation_store.cpp b/apps/calculation/calculation_store.cpp index b48ddbe4d..559aa2b62 100644 --- a/apps/calculation/calculation_store.cpp +++ b/apps/calculation/calculation_store.cpp @@ -11,7 +11,7 @@ CalculationStore::CalculationStore() : Calculation * CalculationStore::push(const char * text, Context * context) { Calculation * result = &m_calculations[m_startIndex]; - result->setContent(text, context, this); + result->setContent(text, context, ansExpression(context)); m_startIndex++; if (m_startIndex >= k_maxNumberOfCalculations) { m_startIndex = 0; @@ -89,4 +89,16 @@ void CalculationStore::tidy() { } } +Expression * CalculationStore::ansExpression(Context * context) { + if (numberOfCalculations() == 0) { + static Rational defaultExpression(0); + return &defaultExpression; + } + Calculation * lastCalculation = calculationAtIndex(numberOfCalculations()-1); + if (lastCalculation->input()->isApproximate(*context)) { + return lastCalculation->approximateOutput(context); + } + return lastCalculation->exactOutput(context); +} + } diff --git a/apps/calculation/calculation_store.h b/apps/calculation/calculation_store.h index 598b7b32a..158f1681a 100644 --- a/apps/calculation/calculation_store.h +++ b/apps/calculation/calculation_store.h @@ -14,6 +14,7 @@ public: void deleteAll(); int numberOfCalculations(); void tidy(); + Poincare::Expression * ansExpression(Poincare::Context * context); static constexpr int k_maxNumberOfCalculations = 10; private: int m_startIndex;