diff --git a/apps/solver/equation_store.cpp b/apps/solver/equation_store.cpp index 109ca304e..297d0530a 100644 --- a/apps/solver/equation_store.cpp +++ b/apps/solver/equation_store.cpp @@ -150,7 +150,7 @@ EquationStore::Error EquationStore::exactSolve(Poincare::Context * context) { } else { /* 2- Polynomial & Monovariable? */ assert(numberOfVariables == 1 && numberOfDefinedModels() == 1); - char x = m_variables[0]; + const char x[] = {m_variables[0], 0}; Expression polynomialCoefficients[Expression::k_maxNumberOfPolynomialCoefficients]; int degree = definedModelAtIndex(0)->standardForm(context).getPolynomialReducedCoefficients(x, polynomialCoefficients, *context, preferences->angleUnit()); if (degree == 2) { diff --git a/poincare/include/poincare/addition.h b/poincare/include/poincare/addition.h index e1e40f5af..b05030626 100644 --- a/poincare/include/poincare/addition.h +++ b/poincare/include/poincare/addition.h @@ -26,8 +26,8 @@ public: // Properties Type type() const override { return Type::Addition; } - int polynomialDegree(Context & context, char symbolName) const override; - int getPolynomialCoefficients(Context & context, char symbolName, Expression coefficients[]) const override; + int polynomialDegree(Context & context, const char * symbolName) const override; + int getPolynomialCoefficients(Context & context, const char * symbolName, Expression coefficients[]) const override; // Evaluation template static Complex compute(const std::complex c, const std::complex d) { return Complex(c+d); } @@ -81,7 +81,7 @@ public: // Expression Expression shallowReduce(Context & context, Preferences::AngleUnit angleUnit); Expression shallowBeautify(Context & context, Preferences::AngleUnit angleUnit); - int getPolynomialCoefficients(Context & context, char symbolName, Expression coefficients[]) const; + int getPolynomialCoefficients(Context & context, const char * symbolName, Expression coefficients[]) const; private: static const Number NumeralFactor(const Expression & e); static inline int NumberOfNonNumeralFactors(const Expression & e); diff --git a/poincare/include/poincare/confidence_interval.h b/poincare/include/poincare/confidence_interval.h index 73190ec38..93e8a9e83 100644 --- a/poincare/include/poincare/confidence_interval.h +++ b/poincare/include/poincare/confidence_interval.h @@ -21,7 +21,7 @@ public: // Properties Type type() const override { return Type::ConfidenceInterval; } - int polynomialDegree(Context & context, char symbolName) const override { return -1; } + int polynomialDegree(Context & context, const char * symbolName) const override { return -1; } private: // Layout Layout createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override; diff --git a/poincare/include/poincare/derivative.h b/poincare/include/poincare/derivative.h index fce78d995..b899a5541 100644 --- a/poincare/include/poincare/derivative.h +++ b/poincare/include/poincare/derivative.h @@ -22,7 +22,7 @@ public: // Properties Type type() const override { return Type::Derivative; } - int polynomialDegree(Context & context, char symbolName) const override; + int polynomialDegree(Context & context, const char * symbolName) const override; private: // Layout diff --git a/poincare/include/poincare/division.h b/poincare/include/poincare/division.h index 5162499aa..297ea35ed 100644 --- a/poincare/include/poincare/division.h +++ b/poincare/include/poincare/division.h @@ -25,7 +25,7 @@ public: // Properties Type type() const override { return Type::Division; } - int polynomialDegree(Context & context, char symbolName) const override; + int polynomialDegree(Context & context, const char * symbolName) const override; // Approximation virtual Evaluation approximate(SinglePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { diff --git a/poincare/include/poincare/equal.h b/poincare/include/poincare/equal.h index 6883aee27..b1d5946dd 100644 --- a/poincare/include/poincare/equal.h +++ b/poincare/include/poincare/equal.h @@ -19,7 +19,7 @@ public: // ExpressionNode Type type() const override { return Type::Equal; } - int polynomialDegree(Context & context, char symbolName) const override { return -1; } + int polynomialDegree(Context & context, const char * symbolName) const override { return -1; } private: // Simplification Expression shallowReduce(Context & context, Preferences::AngleUnit angleUnit) override; diff --git a/poincare/include/poincare/expression.h b/poincare/include/poincare/expression.h index 39ab9b78f..581244817 100644 --- a/poincare/include/poincare/expression.h +++ b/poincare/include/poincare/expression.h @@ -123,7 +123,7 @@ public: /* polynomialDegree returns: * - (-1) if the expression is not a polynome * - the degree of the polynome otherwise */ - int polynomialDegree(Context & context, char symbolName) const { return this->node()->polynomialDegree(context, symbolName); } + int polynomialDegree(Context & context, const char * symbolName) const { return this->node()->polynomialDegree(context, symbolName); } /* getVariables fills the table variables with the variable present in the * expression and returns the number of entries in filled in variables. * For instance getVariables('x+y+2*w/cos(4)') would result in @@ -214,7 +214,7 @@ protected: void removeChildrenInPlace(int currentNumberOfChildren) = delete; /* Properties */ - int getPolynomialCoefficients(Context & context, char symbolName, Expression coefficients[]) const { return node()->getPolynomialCoefficients(context, symbolName, coefficients); } + int getPolynomialCoefficients(Context & context, const char * symbolName, Expression coefficients[]) const { return node()->getPolynomialCoefficients(context, symbolName, coefficients); } /* Simplification */ Expression denominator(Context & context, Preferences::AngleUnit angleUnit) const { return node()->denominator(context, angleUnit); } @@ -232,7 +232,7 @@ private: /* Properties */ Expression defaultReplaceSymbolWithExpression(const char * symbol, Expression expression); - int defaultGetPolynomialCoefficients(Context & context, char symbol, Expression expression[]) const; + int defaultGetPolynomialCoefficients(Context & context, const char * symbol, Expression expression[]) const; /* Expression roots/extrema solver*/ constexpr static double k_solverPrecision = 1.0E-5; diff --git a/poincare/include/poincare/expression_node.h b/poincare/include/poincare/expression_node.h index 03e84fc95..0a625b1cc 100644 --- a/poincare/include/poincare/expression_node.h +++ b/poincare/include/poincare/expression_node.h @@ -101,8 +101,8 @@ public: virtual bool isNumber() const { return false; } /*!*/ virtual Expression replaceSymbolWithExpression(const char * symbol, Expression & expression); /*!*/ virtual Expression setSign(Sign s, Context & context, Preferences::AngleUnit angleUnit); - virtual int polynomialDegree(Context & context, char symbolName) const; - /*!*/ virtual int getPolynomialCoefficients(Context & context, char symbolName, Expression coefficients[]) const; + virtual int polynomialDegree(Context & context, const char * symbolName) const; + /*!*/ virtual int getPolynomialCoefficients(Context & context, const char * symbolName, Expression coefficients[]) const; typedef bool (*isVariableTest)(char c); virtual int getVariables(Context & context, isVariableTest isVariable, char * variables) const; virtual float characteristicXRange(Context & context, Preferences::AngleUnit angleUnit) const; diff --git a/poincare/include/poincare/function.h b/poincare/include/poincare/function.h index a67d7340d..d007a6cfe 100644 --- a/poincare/include/poincare/function.h +++ b/poincare/include/poincare/function.h @@ -18,8 +18,8 @@ public: // Properties Type type() const override { return Type::Function; } - int polynomialDegree(Context & context, char symbolName) const override; - int getPolynomialCoefficients(Context & context, char symbolName, Expression coefficients[]) const 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) const override; float characteristicXRange(Context & context, Preferences::AngleUnit angleUnit) const override; diff --git a/poincare/include/poincare/integral.h b/poincare/include/poincare/integral.h index df3431225..db2a3c414 100644 --- a/poincare/include/poincare/integral.h +++ b/poincare/include/poincare/integral.h @@ -19,7 +19,7 @@ public: // ExpressionNode Type type() const override { return Type::Integral; } - int polynomialDegree(Context & context, char symbolName) const override; + int polynomialDegree(Context & context, const char * symbolName) const override; private: // Layout Layout createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override; diff --git a/poincare/include/poincare/matrix.h b/poincare/include/poincare/matrix.h index 6b1930000..1742543ec 100644 --- a/poincare/include/poincare/matrix.h +++ b/poincare/include/poincare/matrix.h @@ -36,7 +36,7 @@ public: // Properties Type type() const override { return Type::Matrix; } - int polynomialDegree(Context & context, char symbolName) const override; + int polynomialDegree(Context & context, const char * symbolName) const override; // Approximation Evaluation approximate(SinglePrecision p, Context& context, Preferences::AngleUnit angleUnit) const override { diff --git a/poincare/include/poincare/multiplication.h b/poincare/include/poincare/multiplication.h index 1616d1acc..e66937972 100644 --- a/poincare/include/poincare/multiplication.h +++ b/poincare/include/poincare/multiplication.h @@ -22,8 +22,8 @@ public: // Properties Type type() const override { return Type::Multiplication; } Sign sign() const override; - int polynomialDegree(Context & context, char symbolName) const override; - int getPolynomialCoefficients(Context & context, char symbolName, Expression coefficients[]) const override; + int polynomialDegree(Context & context, const char * symbolName) const override; + int getPolynomialCoefficients(Context & context, const char * symbolName, Expression coefficients[]) const override; // Approximation template static Complex compute(const std::complex c, const std::complex d) { return Complex(c*d); } @@ -83,7 +83,7 @@ public: Expression setSign(ExpressionNode::Sign s, Context & context, Preferences::AngleUnit angleUnit); Expression shallowReduce(Context & context, Preferences::AngleUnit angleUnit); Expression shallowBeautify(Context & context, Preferences::AngleUnit angleUnit); - int getPolynomialCoefficients(Context & context, char symbolName, Expression coefficients[]) const; + int getPolynomialCoefficients(Context & context, const char * symbolName, Expression coefficients[]) const; Expression denominator(Context & context, Preferences::AngleUnit angleUnit) const; private: // Simplification diff --git a/poincare/include/poincare/opposite.h b/poincare/include/poincare/opposite.h index 60a8a59a0..2fb981a3a 100644 --- a/poincare/include/poincare/opposite.h +++ b/poincare/include/poincare/opposite.h @@ -24,7 +24,7 @@ public: // Properties Type type() const override { return Type::Opposite; } - int polynomialDegree(Context & context, char symbolName) const override; + int polynomialDegree(Context & context, const char * symbolName) const override; Sign sign() const override; // Approximation diff --git a/poincare/include/poincare/parenthesis.h b/poincare/include/poincare/parenthesis.h index 54a93734b..c5bbf9068 100644 --- a/poincare/include/poincare/parenthesis.h +++ b/poincare/include/poincare/parenthesis.h @@ -20,7 +20,7 @@ public: // Properties Type type() const override { return Type::Parenthesis; } - int polynomialDegree(Context & context, char symbolName) const override; + int polynomialDegree(Context & context, const char * symbolName) const override; // Layout Layout createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override; diff --git a/poincare/include/poincare/power.h b/poincare/include/poincare/power.h index 4e130b0df..d53a85eb8 100644 --- a/poincare/include/poincare/power.h +++ b/poincare/include/poincare/power.h @@ -27,8 +27,8 @@ public: Sign sign() const override; Expression setSign(Sign s, Context & context, Preferences::AngleUnit angleUnit) override; - int polynomialDegree(Context & context, char symbolName) const override; - int getPolynomialCoefficients(Context & context, char symbolName, Expression coefficients[]) const override; + int polynomialDegree(Context & context, const char * symbolName) const override; + int getPolynomialCoefficients(Context & context, const char * symbolName, Expression coefficients[]) const override; template static Complex compute(const std::complex c, const std::complex d); @@ -70,7 +70,7 @@ public: Power(Expression base, Expression exponent); Power(const PowerNode * n) : Expression(n) {} Expression setSign(ExpressionNode::Sign s, Context & context, Preferences::AngleUnit angleUnit); - int getPolynomialCoefficients(Context & context, char symbolName, Expression coefficients[]) const; + int getPolynomialCoefficients(Context & context, const char * symbolName, Expression coefficients[]) const; Expression shallowReduce(Context & context, Preferences::AngleUnit angleUnit); Expression shallowBeautify(Context & context, Preferences::AngleUnit angleUnit); diff --git a/poincare/include/poincare/prediction_interval.h b/poincare/include/poincare/prediction_interval.h index f8931af6c..9dd9b52b9 100644 --- a/poincare/include/poincare/prediction_interval.h +++ b/poincare/include/poincare/prediction_interval.h @@ -23,7 +23,7 @@ public: // Properties Type type() const override { return Type::PredictionInterval; } - int polynomialDegree(Context & context, char symbolName) const override { return -1; } + int polynomialDegree(Context & context, const char * symbolName) const override { return -1; } private: // Layout Layout createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const override; diff --git a/poincare/include/poincare/store.h b/poincare/include/poincare/store.h index 4fcce4c7d..7fefa97b2 100644 --- a/poincare/include/poincare/store.h +++ b/poincare/include/poincare/store.h @@ -22,7 +22,7 @@ public: // ExpressionNode Type type() const override { return Type::Store; } - int polynomialDegree(Context & context, char symbolName) const override { return -1; } + int polynomialDegree(Context & context, const char * symbolName) const override { return -1; } private: // Simplification diff --git a/poincare/include/poincare/subtraction.h b/poincare/include/poincare/subtraction.h index f7a50553c..83d6910e3 100644 --- a/poincare/include/poincare/subtraction.h +++ b/poincare/include/poincare/subtraction.h @@ -23,7 +23,7 @@ public: // Properties Type type() const override { return Type::Subtraction; } - int polynomialDegree(Context & context, char symbolName) const override; + int polynomialDegree(Context & context, const char * symbolName) const override; // Approximation template static Complex compute(const std::complex c, const std::complex d) { return Complex(c - d); } diff --git a/poincare/include/poincare/symbol.h b/poincare/include/poincare/symbol.h index 79acbbc00..3d0ef4822 100644 --- a/poincare/include/poincare/symbol.h +++ b/poincare/include/poincare/symbol.h @@ -32,8 +32,8 @@ public: Type type() const override { return Type::Symbol; } Sign sign() const override; Expression replaceSymbolWithExpression(const char * symbol, Expression & expression) override; - int polynomialDegree(Context & context, char symbolName) const override; - int getPolynomialCoefficients(Context & context, char symbolName, Expression coefficients[]) const 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) const override; float characteristicXRange(Context & context, Preferences::AngleUnit angleUnit) const override; @@ -81,7 +81,7 @@ public: // Expression Expression shallowReduce(Context & context, Preferences::AngleUnit angleUnit); Expression replaceSymbolWithExpression(const char * symbol, Expression & expression); - int getPolynomialCoefficients(Context & context, char symbolName, Expression coefficients[]) const; + int getPolynomialCoefficients(Context & context, const char * symbolName, Expression coefficients[]) const; // Symbol const char * name() const { return node()->name(); } diff --git a/poincare/include/poincare/undefined.h b/poincare/include/poincare/undefined.h index 14f0626cf..6ebc2b47a 100644 --- a/poincare/include/poincare/undefined.h +++ b/poincare/include/poincare/undefined.h @@ -18,7 +18,7 @@ public: // Properties Type type() const override { return Type::Undefined; } - int polynomialDegree(Context & context, char symbolName) const override; + int polynomialDegree(Context & context, const char * symbolName) const override; Expression setSign(Sign s, Context & context, Preferences::AngleUnit angleUnit) override; // Approximation diff --git a/poincare/src/addition.cpp b/poincare/src/addition.cpp index ccf4739c0..9e5f09c3f 100644 --- a/poincare/src/addition.cpp +++ b/poincare/src/addition.cpp @@ -9,7 +9,7 @@ namespace Poincare { -int AdditionNode::polynomialDegree(Context & context, char symbolName) const { +int AdditionNode::polynomialDegree(Context & context, const char * symbolName) const { int degree = 0; for (ExpressionNode * e : children()) { int d = e->polynomialDegree(context, symbolName); @@ -21,7 +21,7 @@ int AdditionNode::polynomialDegree(Context & context, char symbolName) const { return degree; } -int AdditionNode::getPolynomialCoefficients(Context & context, char symbolName, Expression coefficients[]) const { +int AdditionNode::getPolynomialCoefficients(Context & context, const char * symbolName, Expression coefficients[]) const { return Addition(this).getPolynomialCoefficients(context, symbolName, coefficients); } @@ -60,7 +60,7 @@ const Number Addition::NumeralFactor(const Expression & e) { return Rational(1); } -int Addition::getPolynomialCoefficients(Context & context, char symbolName, Expression coefficients[]) const { +int Addition::getPolynomialCoefficients(Context & context, const char * symbolName, Expression coefficients[]) const { int deg = polynomialDegree(context, symbolName); if (deg < 0 || deg > Expression::k_maxPolynomialDegree) { return -1; diff --git a/poincare/src/derivative.cpp b/poincare/src/derivative.cpp index 5788ce054..c37b93f01 100644 --- a/poincare/src/derivative.cpp +++ b/poincare/src/derivative.cpp @@ -8,7 +8,7 @@ namespace Poincare { -int DerivativeNode::polynomialDegree(Context & context, char symbolName) const { +int DerivativeNode::polynomialDegree(Context & context, const char * symbolName) const { if (childAtIndex(0)->polynomialDegree(context, symbolName) == 0 && childAtIndex(1)->polynomialDegree(context, symbolName) == 0) { diff --git a/poincare/src/division.cpp b/poincare/src/division.cpp index 1343afd30..42d84b90b 100644 --- a/poincare/src/division.cpp +++ b/poincare/src/division.cpp @@ -11,7 +11,7 @@ namespace Poincare { -int DivisionNode::polynomialDegree(Context & context, char symbolName) const { +int DivisionNode::polynomialDegree(Context & context, const char * symbolName) const { if (childAtIndex(1)->polynomialDegree(context, symbolName) != 0) { return -1; } diff --git a/poincare/src/expression.cpp b/poincare/src/expression.cpp index b11c1c6bb..d6c98b30d 100644 --- a/poincare/src/expression.cpp +++ b/poincare/src/expression.cpp @@ -105,7 +105,8 @@ bool Expression::getLinearCoefficients(char * variables, Expression coefficients assert(!recursivelyMatches(IsMatrix, context)); char * x = variables; while (*x != 0) { - int degree = polynomialDegree(context, *x); + const char symbol[] = {*x, 0}; + int degree = polynomialDegree(context, symbol); if (degree > 1 || degree < 0) { return false; } @@ -116,7 +117,8 @@ bool Expression::getLinearCoefficients(char * variables, Expression coefficients int index = 0; Expression polynomialCoefficients[k_maxNumberOfPolynomialCoefficients]; while (*x != 0) { - int degree = equation.getPolynomialReducedCoefficients(*x, polynomialCoefficients, context, angleUnit); + const char symbol[] = {*x, 0}; + int degree = equation.getPolynomialReducedCoefficients(symbol, polynomialCoefficients, context, angleUnit); switch (degree) { case 0: coefficients[index] = Rational(0); @@ -189,7 +191,7 @@ Expression Expression::defaultReplaceSymbolWithExpression(const char * symbol, E return *this; } -int Expression::defaultGetPolynomialCoefficients(Context & context, char symbol, Expression coefficients[]) const { +int Expression::defaultGetPolynomialCoefficients(Context & context, const char * symbol, Expression coefficients[]) const { int deg = polynomialDegree(context, symbol); if (deg == 0) { coefficients[0] = clone(); @@ -198,7 +200,7 @@ int Expression::defaultGetPolynomialCoefficients(Context & context, char symbol, return -1; } -int Expression::getPolynomialReducedCoefficients(char symbolName, Expression coefficients[], Context & context, Preferences::AngleUnit angleUnit) const { +int Expression::getPolynomialReducedCoefficients(const char * symbolName, Expression coefficients[], Context & context, Preferences::AngleUnit angleUnit) const { int degree = getPolynomialCoefficients(context, symbolName, coefficients); for (int i = 0; i <= degree; i++) { coefficients[i] = coefficients[i].deepReduce(context, angleUnit); diff --git a/poincare/src/expression_node.cpp b/poincare/src/expression_node.cpp index 58faac70c..439d7b9a1 100644 --- a/poincare/src/expression_node.cpp +++ b/poincare/src/expression_node.cpp @@ -13,7 +13,7 @@ Expression ExpressionNode::setSign(Sign s, Context & context, Preferences::Angle return Expression(); } -int ExpressionNode::polynomialDegree(Context & context, char symbolName) const { +int ExpressionNode::polynomialDegree(Context & context, const char * symbolName) const { for (ExpressionNode * c : children()) { if (c->polynomialDegree(context, symbolName) != 0) { return -1; @@ -22,7 +22,7 @@ int ExpressionNode::polynomialDegree(Context & context, char symbolName) const { return 0; } -int ExpressionNode::getPolynomialCoefficients(Context & context, char symbolName, Expression coefficients[]) const { +int ExpressionNode::getPolynomialCoefficients(Context & context, const char * symbolName, Expression coefficients[]) const { return Expression(this).defaultGetPolynomialCoefficients(context, symbolName, coefficients); } diff --git a/poincare/src/function.cpp b/poincare/src/function.cpp index 4c12881c5..333f4b60d 100644 --- a/poincare/src/function.cpp +++ b/poincare/src/function.cpp @@ -7,12 +7,12 @@ namespace Poincare { -int FunctionNode::polynomialDegree(Context & context, char symbolName) const { +int FunctionNode::polynomialDegree(Context & context, const char * symbolName) const { Expression e = context.expressionForSymbol(Function(this)); return e.polynomialDegree(context, symbolName); } -int FunctionNode::getPolynomialCoefficients(Context & context, char symbolName, Expression coefficients[]) const { +int FunctionNode::getPolynomialCoefficients(Context & context, const char * symbolName, Expression coefficients[]) const { Expression e = context.expressionForSymbol(Function(this)); return e.getPolynomialCoefficients(context, symbolName, coefficients); } diff --git a/poincare/src/integral.cpp b/poincare/src/integral.cpp index bf826889e..58373aa22 100644 --- a/poincare/src/integral.cpp +++ b/poincare/src/integral.cpp @@ -9,7 +9,7 @@ namespace Poincare { -int IntegralNode::polynomialDegree(Context & context, char symbolName) const { +int IntegralNode::polynomialDegree(Context & context, const char * symbolName) const { if (childAtIndex(0)->polynomialDegree(context, symbolName) == 0 && childAtIndex(1)->polynomialDegree(context, symbolName) == 0 && childAtIndex(2)->polynomialDegree(context, symbolName) == 0) diff --git a/poincare/src/matrix.cpp b/poincare/src/matrix.cpp index 64786a4ad..6d291e102 100644 --- a/poincare/src/matrix.cpp +++ b/poincare/src/matrix.cpp @@ -17,7 +17,7 @@ void MatrixNode::didAddChildAtIndex(int newNumberOfChildren) { setNumberOfColumns(newNumberOfChildren); } -int MatrixNode::polynomialDegree(Context & context, char symbolName) const { +int MatrixNode::polynomialDegree(Context & context, const char * symbolName) const { return -1; } diff --git a/poincare/src/multiplication.cpp b/poincare/src/multiplication.cpp index 982e5c06c..20f22838d 100644 --- a/poincare/src/multiplication.cpp +++ b/poincare/src/multiplication.cpp @@ -28,7 +28,7 @@ ExpressionNode::Sign MultiplicationNode::sign() const { return (Sign)sign; } -int MultiplicationNode::polynomialDegree(Context & context, char symbolName) const { +int MultiplicationNode::polynomialDegree(Context & context, const char * symbolName) const { int degree = 0; for (ExpressionNode * c : children()) { int d = c->polynomialDegree(context, symbolName); @@ -40,7 +40,7 @@ int MultiplicationNode::polynomialDegree(Context & context, char symbolName) con return degree; } -int MultiplicationNode::getPolynomialCoefficients(Context & context, char symbolName, Expression coefficients[]) const { +int MultiplicationNode::getPolynomialCoefficients(Context & context, const char * symbolName, Expression coefficients[]) const { return Multiplication(this).getPolynomialCoefficients(context, symbolName, coefficients); } @@ -195,7 +195,7 @@ Expression Multiplication::shallowBeautify(Context & context, Preferences::Angle return thisExp; } -int Multiplication::getPolynomialCoefficients(Context & context, char symbolName, Expression coefficients[]) const { +int Multiplication::getPolynomialCoefficients(Context & context, const char * symbolName, Expression coefficients[]) const { int deg = polynomialDegree(context, symbolName); if (deg < 0 || deg > Expression::k_maxPolynomialDegree) { return -1; diff --git a/poincare/src/opposite.cpp b/poincare/src/opposite.cpp index f1b1f05b4..ac829e0db 100644 --- a/poincare/src/opposite.cpp +++ b/poincare/src/opposite.cpp @@ -13,7 +13,7 @@ extern "C" { namespace Poincare { -int OppositeNode::polynomialDegree(Context & context, char symbolName) const { +int OppositeNode::polynomialDegree(Context & context, const char * symbolName) const { return childAtIndex(0)->polynomialDegree(context, symbolName); } diff --git a/poincare/src/parenthesis.cpp b/poincare/src/parenthesis.cpp index 893982c64..500003b81 100644 --- a/poincare/src/parenthesis.cpp +++ b/poincare/src/parenthesis.cpp @@ -3,7 +3,7 @@ namespace Poincare { -int ParenthesisNode::polynomialDegree(Context & context, char symbolName) const { +int ParenthesisNode::polynomialDegree(Context & context, const char * symbolName) const { return childAtIndex(0)->polynomialDegree(context, symbolName); } diff --git a/poincare/src/power.cpp b/poincare/src/power.cpp index 613bb46e9..d947272da 100644 --- a/poincare/src/power.cpp +++ b/poincare/src/power.cpp @@ -48,7 +48,7 @@ Expression PowerNode::setSign(Sign s, Context & context, Preferences::AngleUnit return Power(this).setSign(s, context, angleUnit); } -int PowerNode::polynomialDegree(Context & context, char symbolName) const { +int PowerNode::polynomialDegree(Context & context, const char * symbolName) const { int deg = ExpressionNode::polynomialDegree(context, symbolName); if (deg == 0) { return deg; @@ -72,7 +72,7 @@ int PowerNode::polynomialDegree(Context & context, char symbolName) const { return -1; } -int PowerNode::getPolynomialCoefficients(Context & context, char symbolName, Expression coefficients[]) const { +int PowerNode::getPolynomialCoefficients(Context & context, const char * symbolName, Expression coefficients[]) const { return Power(this).getPolynomialCoefficients(context, symbolName, coefficients); } @@ -206,7 +206,7 @@ Expression Power::setSign(ExpressionNode::Sign s, Context & context, Preferences return result; } -int Power::getPolynomialCoefficients(Context & context, char symbolName, Expression coefficients[]) const { +int Power::getPolynomialCoefficients(Context & context, const char * symbolName, Expression coefficients[]) const { int deg = polynomialDegree(context, symbolName); if (deg <= 0) { return Expression::defaultGetPolynomialCoefficients(context, symbolName, coefficients); diff --git a/poincare/src/subtraction.cpp b/poincare/src/subtraction.cpp index f60564fc5..d48a13392 100644 --- a/poincare/src/subtraction.cpp +++ b/poincare/src/subtraction.cpp @@ -8,7 +8,7 @@ namespace Poincare { -int SubtractionNode::polynomialDegree(Context & context, char symbolName) const { +int SubtractionNode::polynomialDegree(Context & context, const char * symbolName) const { int degree = 0; for (ExpressionNode * e : children()) { int d = e->polynomialDegree(context, symbolName); diff --git a/poincare/src/symbol.cpp b/poincare/src/symbol.cpp index 7153b7c5d..ecceca507 100644 --- a/poincare/src/symbol.cpp +++ b/poincare/src/symbol.cpp @@ -34,14 +34,14 @@ Expression SymbolNode::replaceSymbolWithExpression(const char * symbol, Expressi return Symbol(this).replaceSymbolWithExpression(symbol, expression); } -int SymbolNode::polynomialDegree(Context & context, char symbolName) const { - if (m_name == symbolName) { +int SymbolNode::polynomialDegree(Context & context, const char * symbolName) const { + if (strcmp(m_name,symbolName) == 0) { return 1; } return 0; } -int SymbolNode::getPolynomialCoefficients(Context & context, char symbolName, Expression coefficients[]) const { +int SymbolNode::getPolynomialCoefficients(Context & context, const char * symbolName, Expression coefficients[]) const { return Symbol(this).getPolynomialCoefficients(context, symbolName, coefficients); } @@ -196,7 +196,7 @@ Expression Symbol::replaceSymbolWithExpression(const char * symbol, Expression & return *this; } -int Symbol::getPolynomialCoefficients(Context & context, char symbolName, Expression coefficients[]) const { +int Symbol::getPolynomialCoefficients(Context & context, const char * symbolName, Expression coefficients[]) const { if (name() == symbolName) { coefficients[0] = Rational(0); coefficients[1] = Rational(1); diff --git a/poincare/src/trigonometry.cpp b/poincare/src/trigonometry.cpp index 3af27172a..814e352f1 100644 --- a/poincare/src/trigonometry.cpp +++ b/poincare/src/trigonometry.cpp @@ -17,7 +17,8 @@ namespace Poincare { float Trigonometry::characteristicXRange(const Expression & e, Context & context, Preferences::AngleUnit angleUnit) { assert(e.numberOfChildren() == 1); - int d = e.childAtIndex(0).polynomialDegree(context, SpecialSymbols::UnknownX); + const char x[] = {SpecialSymbols::UnknownX, 0}; + int d = e.childAtIndex(0).polynomialDegree(context, x); if (d < 0 || d > 1) { // child(0) is not linear so we cannot easily find an interesting range return e.childAtIndex(0).characteristicXRange(context, angleUnit); diff --git a/poincare/src/undefined.cpp b/poincare/src/undefined.cpp index 6e2fd0ad3..9723b2c2f 100644 --- a/poincare/src/undefined.cpp +++ b/poincare/src/undefined.cpp @@ -9,7 +9,7 @@ extern "C" { namespace Poincare { -int UndefinedNode::polynomialDegree(Context & context, char symbolName) const { +int UndefinedNode::polynomialDegree(Context & context, const char * symbolName) const { return -1; } diff --git a/poincare/test/helper.cpp b/poincare/test/helper.cpp index f5f2ce5eb..b4d7e0ffd 100644 --- a/poincare/test/helper.cpp +++ b/poincare/test/helper.cpp @@ -79,7 +79,7 @@ void assert_parsed_expression_is(const char * expression, Poincare::Expression r quiz_assert(e.isIdenticalTo(r)); } -void assert_parsed_expression_polynomial_degree(const char * expression, int degree, char symbolName) { +void assert_parsed_expression_polynomial_degree(const char * expression, int degree, const char * symbolName) { GlobalContext globalContext; Expression e = parse_expression(expression); e = e.simplify(globalContext, Radian); diff --git a/poincare/test/helper.h b/poincare/test/helper.h index 185e845c5..8a3be178a 100644 --- a/poincare/test/helper.h +++ b/poincare/test/helper.h @@ -19,7 +19,7 @@ void translate_in_ASCII_chars(char * expression); Poincare::Expression parse_expression(const char * expression); void assert_parsed_expression_type(const char * expression, Poincare::ExpressionNode::Type type); void assert_parsed_expression_is(const char * expression, Poincare::Expression r); -void assert_parsed_expression_polynomial_degree(const char * expression, int degree, char symbolName = 'x'); +void assert_parsed_expression_polynomial_degree(const char * expression, int degree, const char * symbolName = "x"); template void assert_parsed_expression_evaluates_to(const char * expression, const char * approximation, Poincare::Preferences::AngleUnit angleUnit = Degree, Poincare::Preferences::ComplexFormat complexFormat = Cartesian, int numberOfSignificantDigits = -1); diff --git a/poincare/test/properties.cpp b/poincare/test/properties.cpp index 6bf4d6164..5f699b4fe 100644 --- a/poincare/test/properties.cpp +++ b/poincare/test/properties.cpp @@ -104,7 +104,7 @@ QUIZ_CASE(poincare_get_variables) { assert_parsed_expression_has_variables("x^2+2*y+k!*A+w", "xykw"); } -void assert_parsed_expression_has_polynomial_coefficient(const char * expression, char symbolName, const char ** coefficients, Preferences::AngleUnit angleUnit = Preferences::AngleUnit::Degree) { +void assert_parsed_expression_has_polynomial_coefficient(const char * expression, const char * symbolName, const char ** coefficients, Preferences::AngleUnit angleUnit = Preferences::AngleUnit::Degree) { GlobalContext globalContext; Expression e = parse_expression(expression); quiz_assert(!e.isUninitialized()); @@ -123,12 +123,12 @@ void assert_parsed_expression_has_polynomial_coefficient(const char * expression QUIZ_CASE(poincare_get_polynomial_coefficients) { const char * coefficient0[] = {"2", "1", "1", 0}; - assert_parsed_expression_has_polynomial_coefficient("x^2+x+2", 'x', coefficient0); + assert_parsed_expression_has_polynomial_coefficient("x^2+x+2", "x", coefficient0); const char * coefficient1[] = {"12+(-6)*P", "12", "3", 0}; //3*x^2+12*x-6*π+12 - assert_parsed_expression_has_polynomial_coefficient("3*(x+2)^2-6*P", 'x', coefficient1); + assert_parsed_expression_has_polynomial_coefficient("3*(x+2)^2-6*P", "x", coefficient1); // TODO: decomment when enable 3-degree polynomes //const char * coefficient2[] = {"2+32*x", "2", "6", "2", 0}; //2*n^3+6*n^2+2*n+2+32*x - //assert_parsed_expression_has_polynomial_coefficient("2*(n+1)^3-4n+32*x", 'n', coefficient2); + //assert_parsed_expression_has_polynomial_coefficient("2*(n+1)^3-4n+32*x", "n", coefficient2); const char * coefficient3[] = {"1", "-P", "1", 0}; //x^2-Pi*x+1 - assert_parsed_expression_has_polynomial_coefficient("x^2-P*x+1", 'x', coefficient3); + assert_parsed_expression_has_polynomial_coefficient("x^2-P*x+1", "x", coefficient3); }