mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-03-19 22:00:28 +01:00
[poincare/parametered_expression] Turn replaceUnknown into replaceSymbolWithExpression
That is the only place where those methods did differ.
This commit is contained in:
committed by
EmilieNumworks
parent
d506bb4442
commit
af2c95be26
@@ -13,7 +13,7 @@ class ParameteredExpressionNode : public ExpressionNode {
|
||||
public:
|
||||
// Expression
|
||||
bool isParameteredExpression() const override { return true; }
|
||||
Expression replaceUnknown(const Symbol & symbol, const Symbol & unknownSymbol) override;
|
||||
Expression replaceSymbolWithExpression(const SymbolAbstract & symbol, const Expression & expression) override;
|
||||
};
|
||||
|
||||
class ParameteredExpression : public Expression {
|
||||
@@ -33,7 +33,7 @@ public:
|
||||
* unknowns: for instance, we want to change f(x)=diff(cos(x),x,x) into
|
||||
* f(X)=diff(cos(x),x,X), X being an unknown. ReplaceUnknownInExpression does
|
||||
* that. */
|
||||
Expression replaceUnknown(const Symbol & symbol, const Symbol & unknownSymbol);
|
||||
Expression replaceSymbolWithExpression(const SymbolAbstract & symbol, const Expression & expression);
|
||||
protected:
|
||||
ParameteredExpression(const ParameteredExpressionNode * node) : Expression(node) {}
|
||||
};
|
||||
|
||||
@@ -5,26 +5,27 @@
|
||||
|
||||
namespace Poincare {
|
||||
|
||||
Expression ParameteredExpressionNode::replaceUnknown(const Symbol & symbol, const Symbol & unknownSymbol) {
|
||||
return ParameteredExpression(this).replaceUnknown(symbol, unknownSymbol);
|
||||
Expression ParameteredExpressionNode::replaceSymbolWithExpression(const SymbolAbstract & symbol, const Expression & expression) {
|
||||
return ParameteredExpression(this).replaceSymbolWithExpression(symbol, expression);
|
||||
}
|
||||
|
||||
Expression ParameteredExpression::replaceUnknown(const Symbol & symbolToReplace, const Symbol & unknownSymbol) {
|
||||
Expression ParameteredExpression::replaceSymbolWithExpression(const SymbolAbstract & symbol, const Expression & expression) {
|
||||
Expression c = childAtIndex(ParameterChildIndex());
|
||||
assert(c.type() == ExpressionNode::Type::Symbol);
|
||||
Symbol& parameterChild = static_cast<Symbol &>(c);
|
||||
if (strcmp(parameterChild.name(), symbolToReplace.name()) != 0) {
|
||||
// If the unknown is not the parameter, replace normally
|
||||
return defaultReplaceSymbolWithExpression(symbolToReplace, unknownSymbol);
|
||||
if (symbol.type() != ExpressionNode::Type::Symbol ||
|
||||
strcmp(symbol.name(), parameterChild.name()) != 0) {
|
||||
// If the symbol is not the parameter, replace normally
|
||||
return defaultReplaceSymbolWithExpression(symbol, expression);
|
||||
}
|
||||
|
||||
/* If the unknown is the parameter, replace the unknown in all children except
|
||||
/* If the symbol is the parameter, replace it in all children except
|
||||
* in the parameter and the parametered children */
|
||||
int childrenCount = numberOfChildren();
|
||||
static_assert(ParameteredChildIndex() == 0 && ParameterChildIndex() == 1,
|
||||
"ParameteredExpression::replaceUnknown might not be valid");
|
||||
"ParameteredExpression::replaceSymbolWithExpression might not be valid");
|
||||
for (int i = 2; i < childrenCount; i++) {
|
||||
childAtIndex(i).replaceUnknown(symbolToReplace, unknownSymbol);
|
||||
childAtIndex(i).replaceSymbolWithExpression(symbol, expression);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user