ChoiceCondition(const std::vector<Type> &);
virtual ChoiceCondition<T> *clone() const;
+ virtual bool equals(const Condition &) const;
virtual bool can_merge(const Condition &, const CompoundCondition &) const;
virtual ChoiceCondition<T> *merge(const std::vector<const Condition *> &, const CompoundCondition &) const;
virtual void add_lines(std::list<FilterStatement> &) const;
return new ChoiceCondition<T>(values);
}
+template<typename T>
+bool ChoiceCondition<T>::equals(const Condition &other) const
+{
+ const ChoiceCondition<T> *other_choice = dynamic_cast<const ChoiceCondition<T> *>(&other);
+ if(!other_choice || values.size()!=other_choice->values.size())
+ return false;
+
+ for(unsigned i=0; i<values.size(); ++i)
+ if(values[i]!=other_choice->values[i])
+ return false;
+
+ return true;
+}
+
template<typename T>
bool ChoiceCondition<T>::can_merge(const Condition &other, const CompoundCondition &parent) const
{