[poincare/parametered_expression] Turn replaceUnknown into replaceSymbolWithExpression

That is the only place where those methods did differ.
This commit is contained in:
Ruben Dashyan
2019-09-13 16:09:50 +02:00
committed by EmilieNumworks
parent d506bb4442
commit af2c95be26
2 changed files with 12 additions and 11 deletions

View File

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

View File

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