]> git.tdb.fi Git - poefilter.git/blob - source/condition.h
Initial version from when I last played
[poefilter.git] / source / condition.h
1 #ifndef CONDITION_H_
2 #define CONDITION_H_
3
4 #include <list>
5 #include <string>
6 #include <msp/strings/format.h>
7 #include "rarity.h"
8
9 class CompoundCondition;
10 class FilterStatement;
11
12 class Condition
13 {
14 protected:
15         Condition() { }
16 public:
17         virtual ~Condition() { }
18
19         virtual Condition *clone() const = 0;
20         virtual bool can_merge(const Condition &, const CompoundCondition &) const { return false; }
21         virtual void add_lines(std::list<FilterStatement> &) const = 0;
22         virtual void add_merged_lines(const std::list<Condition *> &, const CompoundCondition &, std::list<FilterStatement> &) const { }
23 };
24
25
26 class CompoundCondition: public Condition
27 {
28 protected:
29         std::list<Condition *> conditions;
30
31 public:
32         virtual ~CompoundCondition();
33
34 protected:
35         void clone_to(CompoundCondition &) const;
36
37 public:
38         void add(Condition *);
39 };
40
41
42 class AndCondition: public CompoundCondition
43 {
44 public:
45         virtual Condition *clone() const;
46         virtual void add_lines(std::list<FilterStatement> &) const;
47 };
48
49
50 class OrCondition: public CompoundCondition
51 {
52 public:
53         virtual Condition *clone() const;
54         virtual void add_lines(std::list<FilterStatement> &) const;
55 };
56
57
58 class LinkedColorsCondition: public Condition
59 {
60 public:
61         struct Colors
62         {
63                 char colors[7];
64         };
65
66 private:
67         Colors colors;
68         
69 public:
70         LinkedColorsCondition(const Colors &);
71
72         virtual Condition *clone() const;
73         virtual void add_lines(std::list<FilterStatement> &) const;
74 };
75
76 void operator>>(const Msp::LexicalConverter &, LinkedColorsCondition::Colors &);
77
78 #endif