diff --git a/poincare/include/poincare/expression.h b/poincare/include/poincare/expression.h index 579bd9e6a..e8a724aac 100644 --- a/poincare/include/poincare/expression.h +++ b/poincare/include/poincare/expression.h @@ -148,7 +148,8 @@ public: /* Simplification */ static void simplify(Expression ** expressionAddress, Context & context, AngleUnit angleUnit = AngleUnit::Default); - bool containType(Type type) const; + typedef bool (*ExpressionTest)(const Expression * e); + bool recursivelyMatches(ExpressionTest test) const; /* Evaluation Engine * The function evaluate creates a new expression and thus mallocs memory. diff --git a/poincare/src/expression.cpp b/poincare/src/expression.cpp index bb04df094..b17177eda 100644 --- a/poincare/src/expression.cpp +++ b/poincare/src/expression.cpp @@ -95,12 +95,12 @@ Expression * Expression::deepBeautify(Context & context, AngleUnit angleUnit) { return e; } -bool Expression::containType(Type t) const { - if (type() == t) { +bool Expression::recursivelyMatches(ExpressionTest test) const { + if (test(this)) { return true; } for (int i = 0; i < numberOfOperands(); i++) { - if (operand(i)->containType(t)) { + if (test(operand(i))) { return true; } }