X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Frangecondition.h;h=811a1aa48ffba85371d04249ef0ce0eef0f4cb36;hb=e5a3e8e16d536dc63889a963fd694ea60e92a24f;hp=ad54e0a0582f6e89cdd3b1834cc06a88aa334e70;hpb=5fc41ee7ef64c03a2deea92857578620d3b5d6d5;p=poefilter.git diff --git a/source/rangecondition.h b/source/rangecondition.h index ad54e0a..811a1aa 100644 --- a/source/rangecondition.h +++ b/source/rangecondition.h @@ -20,8 +20,9 @@ public: RangeCondition(Type, Type); virtual RangeCondition *clone() const; + virtual bool equals(const Condition &) const; virtual bool can_merge(const Condition &, const CompoundCondition &) const; - virtual RangeCondition *merge(const std::vector &, const CompoundCondition &) const; + virtual RangeCondition *merge(const std::vector &, const CompoundCondition &) const; virtual bool is_viable() const { return min<=max; } virtual void add_lines(std::list &) const; }; @@ -133,6 +134,16 @@ RangeCondition *RangeCondition::clone() const return new RangeCondition(min, max); } +template +bool RangeCondition::equals(const Condition &other) const +{ + const RangeCondition *other_range = dynamic_cast *>(&other); + if(!other_range) + return false; + + return (min==other_range->min && max==other_range->max); +} + template bool RangeCondition::can_merge(const Condition &other, const CompoundCondition &parent) const { @@ -149,7 +160,7 @@ bool RangeCondition::can_merge(const Condition &other, const CompoundConditio } template -RangeCondition *RangeCondition::merge(const std::vector &conditions, const CompoundCondition &parent) const +RangeCondition *RangeCondition::merge(const std::vector &conditions, const CompoundCondition &parent) const { if(conditions.empty()) return 0; @@ -160,9 +171,9 @@ RangeCondition *RangeCondition::merge(const std::vector &cond result = new RangeCondition(Traits::get_min(), Traits::get_max()); else result = new RangeCondition(Traits::get_max(), Traits::get_min()); - 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 RangeCondition *c = static_cast *>(*i); + const RangeCondition *c = static_cast *>(*i); if(intersect) { result->min = std::max(result->min, c->min);