diff --git a/poincare/include/poincare/absolute_value.h b/poincare/include/poincare/absolute_value.h index b9f8238ce..62e419bc7 100644 --- a/poincare/include/poincare/absolute_value.h +++ b/poincare/include/poincare/absolute_value.h @@ -13,7 +13,7 @@ public: Type type() const override; Sign sign() const override { return Sign::Positive; } private: - Expression setSign(Sign s, Context & context, Preferences::AngleUnit angleUnit) override; + Expression setSign(Sign s, Context & context, Preferences::AngleUnit angleUnit) const override; /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override; int serialize(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { diff --git a/poincare/include/poincare/expression.h b/poincare/include/poincare/expression.h index 1c2300d7e..201efae79 100644 --- a/poincare/include/poincare/expression.h +++ b/poincare/include/poincare/expression.h @@ -22,7 +22,7 @@ public: Expression() : Expression(nullptr) {} virtual ~Expression() = default; static Expression parse(char const * string); - Expression replaceSymbolWithExpression(char symbol, Expression expression) { return node()->replaceSymbolWithExpression(symbol, expression); } + Expression replaceSymbolWithExpression(char symbol, Expression expression) const { return node()->replaceSymbolWithExpression(symbol, expression); } /* Reference */ ExpressionNode * node() const override { @@ -43,7 +43,7 @@ public: /* Properties */ ExpressionNode::Type type() const { return node()->type(); } ExpressionNode::Sign sign() const { return node()->sign(); } - Expression setSign(ExpressionNode::Sign s, Context & context, Preferences::AngleUnit angleUnit); + Expression setSign(ExpressionNode::Sign s, Context & context, Preferences::AngleUnit angleUnit) const; bool isUndefinedOrAllocationFailure() const { return node()->type() == ExpressionNode::Type::Undefined || node()->type() == ExpressionNode::Type::AllocationFailure; } bool isNumber() const { return node()->isNumber(); } bool isRationalZero() const; diff --git a/poincare/include/poincare/expression_node.h b/poincare/include/poincare/expression_node.h index 04fda7da7..0b2c16de0 100644 --- a/poincare/include/poincare/expression_node.h +++ b/poincare/include/poincare/expression_node.h @@ -100,8 +100,8 @@ public: }; virtual Sign sign() const { return Sign::Unknown; } virtual bool isNumber() const { return false; } - /*!*/ virtual Expression replaceSymbolWithExpression(char symbol, Expression expression); - /*!*/ virtual Expression setSign(Sign s, Context & context, Preferences::AngleUnit angleUnit); + /*!*/ virtual Expression replaceSymbolWithExpression(char symbol, Expression expression) const; + /*!*/ virtual Expression setSign(Sign s, Context & context, Preferences::AngleUnit angleUnit) const; virtual int polynomialDegree(char symbolName) const; /*!*/ virtual int getPolynomialCoefficients(char symbolName, Expression coefficients[]) const; typedef bool (*isVariableTest)(char c); diff --git a/poincare/include/poincare/integer.h b/poincare/include/poincare/integer.h index 598d9b491..7657bdd81 100644 --- a/poincare/include/poincare/integer.h +++ b/poincare/include/poincare/integer.h @@ -139,7 +139,7 @@ public: // ExpressionNode Sign sign() const override { return m_negative ? Sign::Negative : Sign::Positive; } - Expression setSign(Sign s, Context & context, Preferences::AngleUnit angleUnit) override; + Expression setSign(Sign s, Context & context, Preferences::AngleUnit angleUnit) const override; void setNegative(bool negative); @@ -215,7 +215,7 @@ private: // Simplification Expression shallowReduce(Context & context, Preferences::AngleUnit angleUnit) const; - Expression setSign(ExpressionNode::Sign s, Context & context, Preferences::AngleUnit angleUnit); + Expression setSign(ExpressionNode::Sign s, Context & context, Preferences::AngleUnit angleUnit) const; }; struct IntegerDivision { diff --git a/poincare/include/poincare/multiplication.h b/poincare/include/poincare/multiplication.h index 4764a5928..abb614cdc 100644 --- a/poincare/include/poincare/multiplication.h +++ b/poincare/include/poincare/multiplication.h @@ -32,7 +32,7 @@ public: template static MatrixComplex computeOnMatrices(const MatrixComplex m, const MatrixComplex n); private: /* Property */ - Expression setSign(Sign s, Context & context, Preferences::AngleUnit angleUnit) override; + Expression setSign(Sign s, Context & context, Preferences::AngleUnit angleUnit) const override; /* Layout */ bool needsParenthesesWithParent(SerializableNode * parentNode) const override; LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override; diff --git a/poincare/include/poincare/power.h b/poincare/include/poincare/power.h index 96f6e247a..b7371394d 100644 --- a/poincare/include/poincare/power.h +++ b/poincare/include/poincare/power.h @@ -24,7 +24,7 @@ public: // Properties virtual Type type() const override { return Type::Power; } virtual Sign sign() const override; - virtual Expression setSign(Sign s, Context & context, Preferences::AngleUnit angleUnit) override; + virtual Expression setSign(Sign s, Context & context, Preferences::AngleUnit angleUnit) const override; int polynomialDegree(char symbolName) const override; int privateGetPolynomialCoefficients(char symbolName, Expression * coefficients[]) const override; @@ -76,8 +76,8 @@ public: Power(Expression base, Expression exponent); Power(const PowerNode * n) : Expression(n) {} - Expression setSign(Sign s, Context & context, Preferences::AngleUnit angleUnit); - Expression shallowReduce(Context & context, Preferences::AngleUnit angleUnit); + Expression setSign(Sign s, Context & context, Preferences::AngleUnit angleUnit) const; + Expression shallowReduce(Context & context, Preferences::AngleUnit angleUnit) const; }; diff --git a/poincare/include/poincare/random.h b/poincare/include/poincare/random.h index a80a1ed9b..77189ea0d 100644 --- a/poincare/include/poincare/random.h +++ b/poincare/include/poincare/random.h @@ -14,7 +14,7 @@ public: Sign sign() const override { return Sign::Positive; } template static T random(); private: - Expression setSign(Sign s, Context & context, Preferences::AngleUnit angleUnit) override; + Expression setSign(Sign s, Context & context, Preferences::AngleUnit angleUnit) const override; /* Layout */ LayoutRef createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override { return LayoutHelper::Prefix(this, floatDisplayMode, numberOfSignificantDigits, name()); diff --git a/poincare/include/poincare/rational.h b/poincare/include/poincare/rational.h index 58cb1c231..0c4799d5f 100644 --- a/poincare/include/poincare/rational.h +++ b/poincare/include/poincare/rational.h @@ -55,7 +55,7 @@ public: private: int simplificationOrderSameType(const ExpressionNode * e, bool canBeInterrupted) const override; Expression shallowBeautify(Context & context, Preferences::AngleUnit angleUnit) const override; - Expression setSign(Sign s, Context & context, Preferences::AngleUnit angleUnit) override; + Expression setSign(Sign s, Context & context, Preferences::AngleUnit angleUnit) const override; Expression denominator(Context & context, Preferences::AngleUnit angleUnit) const override; bool m_negative; size_t m_numberOfDigitsNumerator; diff --git a/poincare/include/poincare/symbol.h b/poincare/include/poincare/symbol.h index 2480c7617..dca89239c 100644 --- a/poincare/include/poincare/symbol.h +++ b/poincare/include/poincare/symbol.h @@ -24,7 +24,7 @@ public: // Expression Properties Type type() const override { return Type::Symbol; } Sign sign() const override; - Expression replaceSymbolWithExpression(char symbol, Expression expression) override; + Expression replaceSymbolWithExpression(char symbol, Expression expression) const override; int polynomialDegree(char symbolName) const override; int getPolynomialCoefficients(char symbolName, Expression coefficients[]) const override; int getVariables(isVariableTest isVariable, char * variables) const override; diff --git a/poincare/src/absolute_value.cpp b/poincare/src/absolute_value.cpp index 38a9e7032..5df5ade5d 100644 --- a/poincare/src/absolute_value.cpp +++ b/poincare/src/absolute_value.cpp @@ -18,7 +18,7 @@ Expression * AbsoluteValue::clone() const { return a; } -Expression * AbsoluteValue::setSign(Sign s, Context & context, Preferences::AngleUnit angleUnit) { +Expression * AbsoluteValue::setSign(Sign s, Context & context, Preferences::AngleUnit angleUnit) const { assert(s == Sign::Positive); return this; } diff --git a/poincare/src/expression_node.cpp b/poincare/src/expression_node.cpp index ad7b0cc9f..e9a74a720 100644 --- a/poincare/src/expression_node.cpp +++ b/poincare/src/expression_node.cpp @@ -10,7 +10,7 @@ ExpressionNode * ExpressionNode::FailedAllocationStaticNode() { return &FailureNode; } -Expression ExpressionNode::replaceSymbolWithExpression(char symbol, Expression expression) { +Expression ExpressionNode::replaceSymbolWithExpression(char symbol, Expression expression) const { Expression e = Expression(this); int nbChildren = e.numberOfChildren(); for (int i = 0; i < nbChildren; i++) { @@ -20,7 +20,7 @@ Expression ExpressionNode::replaceSymbolWithExpression(char symbol, Expression e return e; } -Expression ExpressionNode::setSign(Sign s, Context & context, Preferences::AngleUnit angleUnit) { +Expression ExpressionNode::setSign(Sign s, Context & context, Preferences::AngleUnit angleUnit) const { assert(false); return Expression(nullptr); } diff --git a/poincare/src/integer.cpp b/poincare/src/integer.cpp index 2a10bdb8c..7197c0be0 100644 --- a/poincare/src/integer.cpp +++ b/poincare/src/integer.cpp @@ -433,7 +433,7 @@ size_t IntegerNode::size() const { return m_numberOfDigits*sizeof(native_uint_t)+sizeof(IntegerNode); } -Expression IntegerNode::setSign(Sign s, Context & context, Preferences::AngleUnit angleUnit) { +Expression IntegerNode::setSign(Sign s, Context & context, Preferences::AngleUnit angleUnit) const { return Integer(this).setSign(s, context, angleUnit); } @@ -596,7 +596,7 @@ Expression Integer::shallowReduce(Context & context, Preferences::AngleUnit angl return Rational(*this, Integer(1)); } -Expression Integer::setSign(ExpressionNode::Sign s, Context & context, Preferences::AngleUnit angleUnit) { +Expression Integer::setSign(ExpressionNode::Sign s, Context & context, Preferences::AngleUnit angleUnit) const { Integer signedInteger = *this; signedInteger.setNegative(s == ExpressionNode::Sign::Negative); return signedInteger; diff --git a/poincare/src/multiplication.cpp b/poincare/src/multiplication.cpp index 2712099e1..46c3c45cc 100644 --- a/poincare/src/multiplication.cpp +++ b/poincare/src/multiplication.cpp @@ -103,7 +103,7 @@ Expression::Sign Multiplication::sign() const { return (Sign)sign; } -Expression * Multiplication::setSign(Sign s, Context & context, Preferences::AngleUnit angleUnit) { +Expression * Multiplication::setSign(Sign s, Context & context, Preferences::AngleUnit angleUnit) const { assert(s == Sign::Positive); for (int i = 0; i < numberOfChildren(); i++) { if (operand(i)->sign() == Sign::Negative) { diff --git a/poincare/src/power.cpp b/poincare/src/power.cpp index aa23a29c2..44cbcbbac 100644 --- a/poincare/src/power.cpp +++ b/poincare/src/power.cpp @@ -101,11 +101,11 @@ int Power::getPolynomialCoefficients(char symbolName, Expression coefficients[]) return -1; } -Expression PowerNode::setSign(Sign s, Context & context, Preferences::AngleUnit angleUnit) { +Expression PowerNode::setSign(Sign s, Context & context, Preferences::AngleUnit angleUnit) const { return Power(this).setSign(s, context, angleUnit); } -Expression Power::setSign(Sign s, Context & context, Preferences::AngleUnit angleUnit) { +Expression Power::setSign(Sign s, Context & context, Preferences::AngleUnit angleUnit) const { assert(s == Sign::Positive); assert(childAtIndex(0).sign() == Sign::Negative); return Power(childAtIndex(0).setSign(Sign::Positive, context, angleUnit), childAtIndex(1)); diff --git a/poincare/src/random.cpp b/poincare/src/random.cpp index 09969225c..649571737 100644 --- a/poincare/src/random.cpp +++ b/poincare/src/random.cpp @@ -17,7 +17,7 @@ Expression * Random::clone() const { return a; } -Expression * Random::setSign(Sign s, Context & context, Preferences::AngleUnit angleUnit) { +Expression * Random::setSign(Sign s, Context & context, Preferences::AngleUnit angleUnit) const { assert(s == Sign::Positive); return this; } diff --git a/poincare/src/rational.cpp b/poincare/src/rational.cpp index 96aa2ce2d..fb93cbca0 100644 --- a/poincare/src/rational.cpp +++ b/poincare/src/rational.cpp @@ -77,7 +77,7 @@ int RationalNode::serialize(char * buffer, int bufferSize, Preferences::PrintFlo // Expression subclassing -Expression RationalNode::setSign(Sign s, Context & context, Preferences::AngleUnit angleUnit) { +Expression RationalNode::setSign(Sign s, Context & context, Preferences::AngleUnit angleUnit) const { return Rational(this).setSign(s); } diff --git a/poincare/src/symbol.cpp b/poincare/src/symbol.cpp index df46e2ecf..7fb91cbcb 100644 --- a/poincare/src/symbol.cpp +++ b/poincare/src/symbol.cpp @@ -32,7 +32,7 @@ ExpressionNode::Sign SymbolNode::sign() const { return Sign::Unknown; } -Expression SymbolNode::replaceSymbolWithExpression(char symbol, Expression expression) { +Expression SymbolNode::replaceSymbolWithExpression(char symbol, Expression expression) const { if (m_name == symbol) { Expression value = expression.clone(); if (parent() && value.needsParenthesesWithParent(parent())) {