diff --git a/apps/shared/store_context.cpp b/apps/shared/store_context.cpp index 533a7a3e9..804fff700 100644 --- a/apps/shared/store_context.cpp +++ b/apps/shared/store_context.cpp @@ -7,7 +7,7 @@ using namespace Poincare; namespace Shared { -void StoreContext::setExpressionForSymbol(const Expression & expression, const Symbol & symbol, Context & context) { +void StoreContext::setExpressionForSymbol(const Expression & expression, const SymbolAbstract & symbol, Context & context) { m_parentContext->setExpressionForSymbol(expression, symbol, context); } diff --git a/apps/shared/store_context.h b/apps/shared/store_context.h index 9c1eaeb7e..79db7930e 100644 --- a/apps/shared/store_context.h +++ b/apps/shared/store_context.h @@ -19,7 +19,7 @@ public: {} void setParentContext(Poincare::Context * parentContext) { m_parentContext = parentContext; } void setSeriesPairIndex(int j) { m_seriesPairIndex = j; } - void setExpressionForSymbol(const Poincare::Expression & expression, const Poincare::Symbol & symbol, Poincare::Context & context) override; + void setExpressionForSymbol(const Poincare::Expression & expression, const Poincare::SymbolAbstract & symbol, Poincare::Context & context) override; protected: Shared::DoublePairStore * m_store; int m_seriesPairIndex; diff --git a/poincare/include/poincare/context.h b/poincare/include/poincare/context.h index 41cb9a0ad..f538551d9 100644 --- a/poincare/include/poincare/context.h +++ b/poincare/include/poincare/context.h @@ -10,7 +10,7 @@ class Symbol; //TODO remove? class Context { public: virtual const Expression expressionForSymbol(const SymbolAbstract & symbol) = 0; - virtual void setExpressionForSymbol(const Expression & expression, const Symbol & symbol, Context & context) = 0; + virtual void setExpressionForSymbol(const Expression & expression, const SymbolAbstract & symbol, Context & context) = 0; }; } diff --git a/poincare/include/poincare/expression.h b/poincare/include/poincare/expression.h index 72fe46b18..b46b7175f 100644 --- a/poincare/include/poincare/expression.h +++ b/poincare/include/poincare/expression.h @@ -13,7 +13,7 @@ namespace Poincare { class Context; -class Symbol; +class SymbolAbstract; class Expression : public TreeHandle { friend class AbsoluteValue; @@ -148,7 +148,7 @@ public: static constexpr int k_maxPolynomialDegree = 2; static constexpr int k_maxNumberOfPolynomialCoefficients = k_maxPolynomialDegree+1; int getPolynomialReducedCoefficients(const char * symbolName, Expression coefficients[], Context & context, Preferences::AngleUnit angleUnit) const; - Expression replaceSymbolWithExpression(const Symbol & symbol, const Expression & expression) { return node()->replaceSymbolWithExpression(symbol, expression); } + Expression replaceSymbolWithExpression(const SymbolAbstract & symbol, const Expression & expression) { return node()->replaceSymbolWithExpression(symbol, expression); } /* Comparison */ /* isIdenticalTo is the "easy" equality, it returns true if both trees have @@ -236,7 +236,7 @@ private: template Evaluation approximateToEvaluation(Context& context, Preferences::AngleUnit angleUnit) const; /* Properties */ - Expression defaultReplaceSymbolWithExpression(const Symbol & symbol, const Expression expression); + Expression defaultReplaceSymbolWithExpression(const SymbolAbstract & symbol, const Expression expression); int defaultGetPolynomialCoefficients(Context & context, const char * symbol, Expression expression[]) const; /* Expression roots/extrema solver*/ diff --git a/poincare/include/poincare/expression_node.h b/poincare/include/poincare/expression_node.h index 832a42d62..bc036647f 100644 --- a/poincare/include/poincare/expression_node.h +++ b/poincare/include/poincare/expression_node.h @@ -12,7 +12,7 @@ namespace Poincare { /* Methods preceded by '*!*' interfere with the expression pool, which can make * 'this' outdated. They should only be called in a wrapper on Expression. */ -class Symbol; +class SymbolAbstract; class ExpressionNode : public TreeNode { friend class AdditionNode; @@ -101,7 +101,7 @@ public: }; virtual Sign sign() const { return Sign::Unknown; } virtual bool isNumber() const { return false; } - /*!*/ virtual Expression replaceSymbolWithExpression(const Symbol & symbol, const Expression & expression); + /*!*/ virtual Expression replaceSymbolWithExpression(const SymbolAbstract & symbol, const Expression & expression); /*!*/ virtual Expression setSign(Sign s, Context & context, Preferences::AngleUnit angleUnit); virtual int polynomialDegree(Context & context, const char * symbolName) const; /*!*/ virtual int getPolynomialCoefficients(Context & context, const char * symbolName, Expression coefficients[]) const; diff --git a/poincare/include/poincare/function.h b/poincare/include/poincare/function.h index a19a1ee09..9969e1243 100644 --- a/poincare/include/poincare/function.h +++ b/poincare/include/poincare/function.h @@ -24,7 +24,7 @@ public: // Properties Type type() const override { return Type::Function; } Sign sign() const override { return Sign::Unknown; } - Expression replaceSymbolWithExpression(const Symbol & symbol, const Expression & expression) override; + Expression replaceSymbolWithExpression(const SymbolAbstract & symbol, const Expression & expression) override; int polynomialDegree(Context & context, const char * symbolName) const override; int getPolynomialCoefficients(Context & context, const char * symbolName, Expression coefficients[]) const override; int getVariables(Context & context, isVariableTest isVariable, char * variables, int maxSizeVariable) const override; @@ -53,7 +53,7 @@ public: replaceChildAtIndexInPlace(0, operand); } - Expression replaceSymbolWithExpression(const Symbol & symbol, const Expression & expression); + Expression replaceSymbolWithExpression(const SymbolAbstract & symbol, const Expression & expression); Expression shallowReduce(Context & context, Preferences::AngleUnit angleUnit, bool replaceSymbols = true); }; diff --git a/poincare/include/poincare/global_context.h b/poincare/include/poincare/global_context.h index a0eefef1b..9a802fe62 100644 --- a/poincare/include/poincare/global_context.h +++ b/poincare/include/poincare/global_context.h @@ -20,7 +20,7 @@ public: /* The expression recorded in global context is already a expression. * Otherwise, we would need the context and the angle unit to evaluate it */ const Expression expressionForSymbol(const SymbolAbstract & symbol) override; - void setExpressionForSymbol(const Expression & expression, const Symbol & symbol, Context & context) override; + void setExpressionForSymbol(const Expression & expression, const SymbolAbstract & symbol, Context & context) override; static Ion::Storage::Record RecordWithName(const char * name); static bool storageMemoryFull(); //TODO static constexpr uint16_t k_maxNumberOfSequences = 10; diff --git a/poincare/include/poincare/store.h b/poincare/include/poincare/store.h index 8a9703f4c..eeb531626 100644 --- a/poincare/include/poincare/store.h +++ b/poincare/include/poincare/store.h @@ -2,7 +2,7 @@ #define POINCARE_STORE_H #include -#include +#include #include #include @@ -39,16 +39,16 @@ private: class Store final : public Expression { public: Store(const StoreNode * n) : Expression(n) {} - Store(Expression value, Symbol symbol) : Expression(TreePool::sharedPool()->createTreeNode()) { + Store(Expression value, SymbolAbstract symbol) : Expression(TreePool::sharedPool()->createTreeNode()) { replaceChildAtIndexInPlace(0, value); replaceChildAtIndexInPlace(1, symbol); } // Store - const Symbol symbol() const { + const SymbolAbstract symbol() const { assert(childAtIndex(1).type() == ExpressionNode::Type::Symbol || childAtIndex(1).type() == ExpressionNode::Type::Function); - return childAtIndex(1).convert(); + return childAtIndex(1).convert(); } const Expression value() const { return childAtIndex(0); diff --git a/poincare/include/poincare/symbol.h b/poincare/include/poincare/symbol.h index 201609acb..a3aab4120 100644 --- a/poincare/include/poincare/symbol.h +++ b/poincare/include/poincare/symbol.h @@ -25,7 +25,7 @@ public: // Expression Properties Type type() const override { return Type::Symbol; } Sign sign() const override; - Expression replaceSymbolWithExpression(const Symbol & symbol, const Expression & expression) override; + Expression replaceSymbolWithExpression(const SymbolAbstract & symbol, const Expression & expression) override; int polynomialDegree(Context & context, const char * symbolName) const override; int getPolynomialCoefficients(Context & context, const char * symbolName, Expression coefficients[]) const override; int getVariables(Context & context, isVariableTest isVariable, char * variables, int maxSizeVariable) const override; @@ -78,7 +78,7 @@ public: // Expression Expression shallowReduce(Context & context, Preferences::AngleUnit angleUnit, bool replaceSymbols = true); - Expression replaceSymbolWithExpression(const Symbol & symbol, const Expression & expression); + Expression replaceSymbolWithExpression(const SymbolAbstract & symbol, const Expression & expression); int getPolynomialCoefficients(Context & context, const char * symbolName, Expression coefficients[]) const; private: SymbolNode * node() const { return static_cast(Expression::node()); } diff --git a/poincare/include/poincare/variable_context.h b/poincare/include/poincare/variable_context.h index d4d8da0aa..26c1d58a1 100644 --- a/poincare/include/poincare/variable_context.h +++ b/poincare/include/poincare/variable_context.h @@ -13,7 +13,7 @@ public: void setApproximationForVariable(T value); // Context - void setExpressionForSymbol(const Expression & expression, const Symbol & symbol, Context & context) override; + void setExpressionForSymbol(const Expression & expression, const SymbolAbstract & symbol, Context & context) override; const Expression expressionForSymbol(const SymbolAbstract & symbol) override; private: diff --git a/poincare/src/expression.cpp b/poincare/src/expression.cpp index ebb4e00a4..3e20b5fc0 100644 --- a/poincare/src/expression.cpp +++ b/poincare/src/expression.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include #include #include @@ -218,7 +219,7 @@ Evaluation Expression::approximateToEvaluation(Context& context, Preferences: return node()->approximate(U(), context, angleUnit); } -Expression Expression::defaultReplaceSymbolWithExpression(const Symbol & symbol, const Expression expression) { +Expression Expression::defaultReplaceSymbolWithExpression(const SymbolAbstract & symbol, const Expression expression) { for (int i = 0; i < numberOfChildren(); i++) { childAtIndex(i).replaceSymbolWithExpression(symbol, expression); } diff --git a/poincare/src/expression_node.cpp b/poincare/src/expression_node.cpp index 8eb5635da..8876cb6d1 100644 --- a/poincare/src/expression_node.cpp +++ b/poincare/src/expression_node.cpp @@ -5,7 +5,7 @@ namespace Poincare { -Expression ExpressionNode::replaceSymbolWithExpression(const Symbol & symbol, const Expression & expression) { +Expression ExpressionNode::replaceSymbolWithExpression(const SymbolAbstract & symbol, const Expression & expression) { return Expression(this).defaultReplaceSymbolWithExpression(symbol, expression); } diff --git a/poincare/src/function.cpp b/poincare/src/function.cpp index 8fd0241d4..15b898120 100644 --- a/poincare/src/function.cpp +++ b/poincare/src/function.cpp @@ -29,7 +29,7 @@ size_t FunctionNode::size() const { return NodeSize(strlen(m_name)); } -Expression FunctionNode::replaceSymbolWithExpression(const Symbol & symbol, const Expression & expression) { +Expression FunctionNode::replaceSymbolWithExpression(const SymbolAbstract & symbol, const Expression & expression) { return Function(this).replaceSymbolWithExpression(symbol, expression); } @@ -113,7 +113,7 @@ Function::Function(const char * name) : static_cast(Expression::node())->setName(name, strlen(name)); } -Expression Function::replaceSymbolWithExpression(const Symbol & symbol, const Expression & expression) { +Expression Function::replaceSymbolWithExpression(const SymbolAbstract & symbol, const Expression & expression) { // Replace the symbol in the child childAtIndex(0).replaceSymbolWithExpression(symbol, expression); if (symbol.type() == ExpressionNode::Type::Function && strcmp(name(), symbol.name()) == 0) { diff --git a/poincare/src/global_context.cpp b/poincare/src/global_context.cpp index 8640562fe..c09bb6915 100644 --- a/poincare/src/global_context.cpp +++ b/poincare/src/global_context.cpp @@ -37,7 +37,7 @@ const Expression GlobalContext::expressionForSymbol(const SymbolAbstract & symbo return Expression::ExpressionFromRecord(RecordWithName(symbol.name())); } -void GlobalContext::setExpressionForSymbol(const Expression & expression, const Symbol & symbol, Context & context) { +void GlobalContext::setExpressionForSymbol(const Expression & expression, const SymbolAbstract & symbol, Context & context) { sStorageMemoryFull = false; /* If the new expression contains the symbol, replace it because it will be * destroyed afterwards (to be able to do A+2->A) */ diff --git a/poincare/src/store.cpp b/poincare/src/store.cpp index 8697eeecc..a4497001f 100644 --- a/poincare/src/store.cpp +++ b/poincare/src/store.cpp @@ -1,16 +1,16 @@ +#include +#include +#include +#include +#include +#include +#include +#include extern "C" { #include #include #include } -#include -#include -#include -#include -#include -#include -#include - namespace Poincare { diff --git a/poincare/src/symbol.cpp b/poincare/src/symbol.cpp index fcee778f9..bbbe13e62 100644 --- a/poincare/src/symbol.cpp +++ b/poincare/src/symbol.cpp @@ -47,7 +47,7 @@ ExpressionNode::Sign SymbolNode::sign() const { return Sign::Unknown; } -Expression SymbolNode::replaceSymbolWithExpression(const Symbol & symbol, const Expression & expression) { +Expression SymbolNode::replaceSymbolWithExpression(const SymbolAbstract & symbol, const Expression & expression) { return Symbol(this).replaceSymbolWithExpression(symbol, expression); } @@ -210,7 +210,7 @@ Expression Symbol::shallowReduce(Context & context, Preferences::AngleUnit angle return *this; } -Expression Symbol::replaceSymbolWithExpression(const Symbol & symbol, const Expression & expression) { +Expression Symbol::replaceSymbolWithExpression(const SymbolAbstract & symbol, const Expression & expression) { if (symbol.type() == ExpressionNode::Type::Symbol && strcmp(name(), symbol.name()) == 0) { Expression value = expression.clone(); Expression p = parent(); diff --git a/poincare/src/variable_context.cpp b/poincare/src/variable_context.cpp index 65ca57eec..448fead7b 100644 --- a/poincare/src/variable_context.cpp +++ b/poincare/src/variable_context.cpp @@ -18,7 +18,7 @@ void VariableContext::setApproximationForVariable(T value) { m_value = Float(value); } -void VariableContext::setExpressionForSymbol(const Expression & expression, const Symbol & symbol, Context & context) { +void VariableContext::setExpressionForSymbol(const Expression & expression, const SymbolAbstract & symbol, Context & context) { if (strcmp(symbol.name(), m_name) == 0) { if (expression.isUninitialized()) { return;