[poincare] Make methods returning an expression copy const

This commit is contained in:
Émilie Feral
2018-08-09 10:50:09 +02:00
parent ba1fd2d67c
commit fef796f82f
17 changed files with 25 additions and 25 deletions

View File

@@ -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 {

View File

@@ -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;

View File

@@ -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);

View File

@@ -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 {

View File

@@ -32,7 +32,7 @@ public:
template<typename T> static MatrixComplex<T> computeOnMatrices(const MatrixComplex<T> m, const MatrixComplex<T> 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;

View File

@@ -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;
};

View File

@@ -14,7 +14,7 @@ public:
Sign sign() const override { return Sign::Positive; }
template<typename T> 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());

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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);
}

View File

@@ -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;

View File

@@ -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) {

View File

@@ -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));

View File

@@ -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;
}

View File

@@ -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);
}

View File

@@ -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())) {