diff --git a/poincare/include/poincare/commutative_operation.h b/poincare/include/poincare/commutative_operation.h index e7e01f8d1..d38a6103d 100644 --- a/poincare/include/poincare/commutative_operation.h +++ b/poincare/include/poincare/commutative_operation.h @@ -11,6 +11,7 @@ class CommutativeOperation : public Expression { int numberOfOperands() override; float approximate(Context& context) override; ExpressionLayout * createLayout() override; + bool isCommutative() override; protected: virtual float operateApproximatevelyOn(float a, float b) = 0; virtual char operatorChar() = 0; diff --git a/poincare/include/poincare/expression.h b/poincare/include/poincare/expression.h index e24680b3c..9a08d7cf8 100644 --- a/poincare/include/poincare/expression.h +++ b/poincare/include/poincare/expression.h @@ -40,6 +40,7 @@ class Expression { Expression * simplify(); virtual Type type() = 0; + virtual bool isCommutative(); virtual float approximate(Context& context) = 0; }; diff --git a/poincare/src/commutative_operation.cpp b/poincare/src/commutative_operation.cpp index f96c76f90..8ce561859 100644 --- a/poincare/src/commutative_operation.cpp +++ b/poincare/src/commutative_operation.cpp @@ -57,3 +57,8 @@ ExpressionLayout * CommutativeOperation::createLayout() { } return new HorizontalLayout(children_layouts, number_of_children); } + +bool CommutativeOperation::isCommutative() { + return true; +} + diff --git a/poincare/src/expression.cpp b/poincare/src/expression.cpp index cb7f19f94..0b24d46b1 100644 --- a/poincare/src/expression.cpp +++ b/poincare/src/expression.cpp @@ -63,3 +63,7 @@ bool Expression::valueEquals(Expression * e) { * -riden. */ return true; } + +bool Expression::isCommutative() { + return false; +}