mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-03-20 14:20:39 +01:00
[poincare] Make methods returning an expression copy const
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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())) {
|
||||
|
||||
Reference in New Issue
Block a user