From c43211cb457d405de55444ddacd248b70a197a20 Mon Sep 17 00:00:00 2001 From: Romain Goyet Date: Thu, 24 Mar 2016 15:51:22 +0100 Subject: [PATCH] Poincare: Expression::isIdenticalTo Change-Id: I4a28b5b771efc5a00f49aeaa725c264e87e96c88 --- poincare/include/poincare/expression.h | 2 +- poincare/src/expression.cpp | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/poincare/include/poincare/expression.h b/poincare/include/poincare/expression.h index a35894c5b..664ce6a64 100644 --- a/poincare/include/poincare/expression.h +++ b/poincare/include/poincare/expression.h @@ -29,7 +29,7 @@ class Expression { /* identicalTo means strictly the same tree. For example, 3+5 is NOT identi- * cal to 5+3. Those are equal, but not identical. */ - //virtual bool identicalTo(Expression * e); + bool isIdenticalTo(Expression * e); Expression * simplify(); virtual Type type() = 0; diff --git a/poincare/src/expression.cpp b/poincare/src/expression.cpp index 10b9e5e0a..53cb3d67a 100644 --- a/poincare/src/expression.cpp +++ b/poincare/src/expression.cpp @@ -43,3 +43,14 @@ Expression * Expression::simplify() { return result; } +bool Expression::isIdenticalTo(Expression * e) { + if (e->type() != this->type() || e->numberOfOperands() != this->numberOfOperands()) { + return false; + } + for (int i=0; inumberOfOperands(); i++) { + if (!e->operand(i)->isIdenticalTo(this->operand(i))) { + return false; + } + } + return true; +}