]> git.tdb.fi Git - poefilter.git/blobdiff - source/category.cpp
Rework condition merging
[poefilter.git] / source / category.cpp
index 4ceed1883df32f7e971bd8dcb594795f64fa831c..5e454bb9dc7af7dcef5843efa9b4a3b96761404c 100644 (file)
@@ -8,12 +8,17 @@
 using namespace std;
 using namespace Msp;
 
-Category::Category(const string &n):
-       name(n),
+Category::Category():
        condition(0),
        order(0)
 { }
 
+Category::Category(const string &n, unsigned o):
+       name(n),
+       condition(0),
+       order(o)
+{ }
+
 Category::Category(const Category &other):
        name(other.name),
        condition(other.condition ? other.condition->clone() : 0),
@@ -42,7 +47,11 @@ void Category::create_statements(list<FilterStatement> &st) const
                st.push_back(FilterStatement());
 
        if(condition)
-               condition->add_lines(st);
+       {
+               Condition *flat = condition->flatten();
+               flat->add_lines(st);
+               delete flat;
+       }
 }
 
 
@@ -54,6 +63,7 @@ Category::Loader::Loader(Category &c, const PoeFilter &p, CompoundCondition *n):
 {
        add("and", &Loader::and_);
        add("base_type", &Loader::condition<BaseTypeCondition>);
+       add("category", &Loader::category);
        add("class", &Loader::condition<ClassCondition>);
        add_range<DropLevelCondition>("drop_level");
        add_range<HeightCondition>("height");
@@ -62,7 +72,6 @@ Category::Loader::Loader(Category &c, const PoeFilter &p, CompoundCondition *n):
        add_range<LinkedSocketsCondition>("linked_sockets");
        add_range<SocketsCondition>("sockets");
        add("or", &Loader::or_);
-       add("order", &Category::order);
        add_range<QualityCondition>("quality");
        add_range<RarityCondition>("rarity");
        add_range<WidthCondition>("width");
@@ -102,6 +111,12 @@ void Category::Loader::and_()
        add_condition(cond.release());
 }
 
+void Category::Loader::category(const string &name)
+{
+       const Category &categ = poe.get_category(name);
+       add_condition(categ.condition->clone());
+}
+
 template<typename T>
 void Category::Loader::condition(typename T::Type value)
 {