]> git.tdb.fi Git - poefilter.git/blobdiff - source/condition.cpp
Use covariant return type for Condition::clone
[poefilter.git] / source / condition.cpp
index 12ee7301a33dd21a1ab9387089665a32024fb2e6..be5a29f4d11df67cf5785a5938514574701d48b4 100644 (file)
@@ -6,13 +6,13 @@ using namespace Msp;
 
 CompoundCondition::~CompoundCondition()
 {
-       for(list<Condition *>::const_iterator i=conditions.begin(); i!=conditions.end(); ++i)
+       for(vector<Condition *>::const_iterator i=conditions.begin(); i!=conditions.end(); ++i)
                delete *i;
 }
 
 void CompoundCondition::clone_to(CompoundCondition &other) const
 {
-       for(list<Condition *>::const_iterator i=conditions.begin(); i!=conditions.end(); ++i)
+       for(vector<Condition *>::const_iterator i=conditions.begin(); i!=conditions.end(); ++i)
                other.add((*i)->clone());
 }
 
@@ -22,7 +22,7 @@ void CompoundCondition::add(Condition *cond)
 }
 
 
-Condition *AndCondition::clone() const
+AndCondition *AndCondition::clone() const
 {
        AndCondition *result = new AndCondition;
        clone_to(*result);
@@ -31,12 +31,12 @@ Condition *AndCondition::clone() const
 
 void AndCondition::add_lines(list<FilterStatement> &st) const
 {
-       for(list<Condition *>::const_iterator i=conditions.begin(); i!=conditions.end(); ++i)
+       for(vector<Condition *>::const_iterator i=conditions.begin(); i!=conditions.end(); ++i)
                (*i)->add_lines(st);
 }
 
 
-Condition *OrCondition::clone() const
+OrCondition *OrCondition::clone() const
 {
        OrCondition *result = new OrCondition;
        clone_to(*result);
@@ -46,7 +46,7 @@ Condition *OrCondition::clone() const
 void OrCondition::add_lines(list<FilterStatement> &st) const
 {
        bool merge = conditions.size()>1;
-       for(list<Condition *>::const_iterator i=conditions.begin(); (merge && ++i!=conditions.end()); )
+       for(vector<Condition *>::const_iterator i=conditions.begin(); (merge && ++i!=conditions.end()); )
                merge = conditions.front()->can_merge(**i, *this);
 
        if(merge)
@@ -54,7 +54,7 @@ void OrCondition::add_lines(list<FilterStatement> &st) const
        else
        {
                list<FilterStatement> result;
-               for(list<Condition *>::const_iterator i=conditions.begin(); i!=conditions.end(); ++i)
+               for(vector<Condition *>::const_iterator i=conditions.begin(); i!=conditions.end(); ++i)
                {
                        list<FilterStatement> sub_result = st;
                        (*i)->add_lines(sub_result);
@@ -69,7 +69,7 @@ LinkedColorsCondition::LinkedColorsCondition(const Colors &c):
        colors(c)
 { }
 
-Condition *LinkedColorsCondition::clone() const
+LinkedColorsCondition *LinkedColorsCondition::clone() const
 {
        return new LinkedColorsCondition(colors);
 }