From 1853d31827d1de0a954a8f74e2d400b392f8a342 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Mon, 2 Oct 2017 11:48:44 +0200 Subject: [PATCH] [poincare] Fix implemenation of AnySelector Change-Id: I8b17cf9e06a22bdcb84787a03fb9011b08dc93c4 --- poincare/src/simplification/Makefile | 1 + .../simplification/selector/any_selector.cpp | 18 ++++++++++++++++++ .../src/simplification/selector/any_selector.h | 4 +--- 3 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 poincare/src/simplification/selector/any_selector.cpp diff --git a/poincare/src/simplification/Makefile b/poincare/src/simplification/Makefile index 04a34867a..cb50a87f1 100644 --- a/poincare/src/simplification/Makefile +++ b/poincare/src/simplification/Makefile @@ -15,6 +15,7 @@ products += $(rulesets) objs += $(addprefix $(prefix)/,\ expression_simplify.o \ rule.o \ + selector/any_selector.o \ selector/combination.o \ selector/selector.o \ selector/type_and_identifier_selector.o \ diff --git a/poincare/src/simplification/selector/any_selector.cpp b/poincare/src/simplification/selector/any_selector.cpp new file mode 100644 index 000000000..420d7a209 --- /dev/null +++ b/poincare/src/simplification/selector/any_selector.cpp @@ -0,0 +1,18 @@ +#include "any_selector.h" +#include "combination.h" + +namespace Poincare { +namespace Simplification { + +bool AnySelector::acceptsLocationInCombination(const Combination * combination, int location) const { + // Yes, if no other slot in the combination before me is the same + for (int i=0; iexpressionIndexForSelectorIndex(i) == combination->expressionIndexForSelectorIndex(location)) { + return false; + } + } + return immediateMatch(combination->expressionForSelectorIndex(location)); +} + +} +} diff --git a/poincare/src/simplification/selector/any_selector.h b/poincare/src/simplification/selector/any_selector.h index b39abec22..2efe39429 100644 --- a/poincare/src/simplification/selector/any_selector.h +++ b/poincare/src/simplification/selector/any_selector.h @@ -9,9 +9,7 @@ namespace Simplification { class AnySelector : public Selector { public: using Selector::Selector; - bool acceptsLocationInCombination(const Combination * combination, int location) const override { - return true; - } + bool acceptsLocationInCombination(const Combination * combination, int location) const override; bool immediateMatch(const Expression * e) const override { return true; }