X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fchoicecondition.h;h=9792f64c42f012963933b794ca09cba09acee6c7;hb=8dcb2ed5219429c1c7d543c422a7471c18917f55;hp=91b5e71aa5e58bbc22ead2df8cf8a54bbc7ca7b8;hpb=f3d3b7227de162f824b8be6be4028a8848f11f2f;p=poefilter.git diff --git a/source/choicecondition.h b/source/choicecondition.h index 91b5e71..9792f64 100644 --- a/source/choicecondition.h +++ b/source/choicecondition.h @@ -1,6 +1,7 @@ #ifndef CHOICECONDITION_H_ #define CHOICECONDITION_H_ +#include #include "condition.h" #include "filter.h" @@ -20,7 +21,7 @@ public: virtual ChoiceCondition *clone() 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; }; @@ -67,18 +68,17 @@ 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 = 0; - for(std::vector::const_iterator i=conditions.begin(); i!=conditions.end(); ++i) + ChoiceCondition *result = new ChoiceCondition(std::vector()); + for(std::vector::const_iterator i=conditions.begin(); i!=conditions.end(); ++i) { - const std::vector &v = static_cast *>(*i)->values; - if(!result) - result = new ChoiceCondition(v); - else - result->values.insert(result->values.end(), v.begin(), v.end()); + 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); } return result; }