X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fchoicecondition.h;h=5673d3f7a65ffe83129ef23273e78656af35a283;hb=b4df72b647f47c25a0ccada832eda9bc0dfb5504;hp=c2f7f0e66875bf465721574ff4cf244af3605ca4;hpb=3169efbcaa882c427d9cc1bbb6dbd187efe98f45;p=poefilter.git diff --git a/source/choicecondition.h b/source/choicecondition.h index c2f7f0e..5673d3f 100644 --- a/source/choicecondition.h +++ b/source/choicecondition.h @@ -20,8 +20,9 @@ public: ChoiceCondition(const std::vector &); virtual ChoiceCondition *clone() const; + virtual bool equals(const Condition &) const; virtual bool can_merge(const Condition &, const CompoundCondition &) const; - virtual ChoiceCondition *merge(const std::vector &, const CompoundCondition &) const; + virtual ChoiceCondition *merge(const std::vector &, const CompoundCondition &) const; virtual void add_lines(std::list &) const; }; @@ -61,6 +62,20 @@ ChoiceCondition *ChoiceCondition::clone() const return new ChoiceCondition(values); } +template +bool ChoiceCondition::equals(const Condition &other) const +{ + const ChoiceCondition *other_choice = dynamic_cast *>(&other); + if(!other_choice || values.size()!=other_choice->values.size()) + return false; + + for(unsigned i=0; ivalues[i]) + return false; + + return true; +} + template bool ChoiceCondition::can_merge(const Condition &other, const CompoundCondition &parent) const { @@ -68,14 +83,14 @@ bool ChoiceCondition::can_merge(const Condition &other, const CompoundConditi } template -ChoiceCondition *ChoiceCondition::merge(const std::vector &conditions, const CompoundCondition &parent) const +ChoiceCondition *ChoiceCondition::merge(const std::vector &conditions, const CompoundCondition &parent) const { if(dynamic_cast(&parent) && !conditions.empty()) { ChoiceCondition *result = new ChoiceCondition(std::vector()); - for(std::vector::const_iterator i=conditions.begin(); i!=conditions.end(); ++i) + for(std::vector::const_iterator i=conditions.begin(); i!=conditions.end(); ++i) { - const std::vector &v = static_cast *>(*i)->values; + const std::vector &v = static_cast *>(*i)->values; for(typename std::vector::const_iterator j=v.begin(); j!=v.end(); ++j) if(Msp::find(result->values, *j)==result->values.end()) result->values.push_back(*j);