Vegastrike 0.5.1 rc1  1.0
Original sources for Vegastrike Evolved
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
criteria.h
Go to the documentation of this file.
1 /*
2  * Vega Strike
3  * Copyright (C) 2003 Mike Byron
4  *
5  * http://vegastrike.sourceforge.net/
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20  */
21 
22 #ifndef __CRITERIA_H__
23 #define __CRITERIA_H__
24 
25 class CriteriaParent;
26 
27 #include <string>
28 #include <vector>
29 #include <set>
30 
31 #include "xml_support.h"
32 
34 
36 
38 {
39 public:
40  virtual bool isDestination( unsigned system ) const = 0;
41  virtual std::string getDescription() const = 0;
42  virtual std::string getText() const = 0;
43 
44  virtual CriteriaNode * unhook() = 0;
45  virtual std::vector< CriteriaNode* >getChildren() const = 0;
46 
47  virtual CriteriaNode * clone() const = 0;
48  CriteriaNode( CriteriaParent *parent = NULL ) : m_parent( parent ) {}
49  virtual ~CriteriaNode() {}
50 
51  void setParent( CriteriaParent *parent )
52  {
53  m_parent = parent;
54  }
56  {
57  return m_parent;
58  }
59 
60 private:
61  CriteriaParent *m_parent;
62 };
63 
65 
67 {
68 public:
69  virtual CriteriaNode * unhook( CriteriaNode *child ) = 0;
70 
71  virtual CriteriaNode * clone() const = 0;
72  CriteriaParent( CriteriaParent *parent = NULL ) : CriteriaNode( parent ) {}
73  virtual ~CriteriaParent() {}
74 
75  virtual void replaceChild( CriteriaNode *child, CriteriaNode *replacement ) = 0;
76 };
77 
79 
81 {
82 public:
83  virtual bool isDestination( unsigned system ) const;
84  virtual std::string getDescription() const;
85  virtual std::string getText() const;
86 
87  virtual CriteriaNode * unhook();
88  virtual CriteriaNode * unhook( CriteriaNode *child );
89  virtual std::vector< CriteriaNode* >getChildren() const;
90 
92  {
93  return m_child;
94  }
95  void setChild( CriteriaNode *node );
96 
97  virtual CriteriaNode * clone() const;
98  CriteriaRoot( CriteriaNode *child = NULL );
99  virtual ~CriteriaRoot();
100 
101  virtual void replaceChild( CriteriaNode *child, CriteriaNode *replacement );
102 
103 protected:
105 };
106 
108 
110 {
111 public:
112  virtual bool isDestination( unsigned system ) const;
113  virtual std::string getDescription() const;
114  virtual std::string getText() const;
115 
116  virtual CriteriaNode * unhook();
117  virtual CriteriaNode * unhook( CriteriaNode *child );
118  virtual std::vector< CriteriaNode* >getChildren() const;
119 
120  virtual CriteriaNode * clone() const;
121  CriteriaNot( CriteriaNode *child );
122  virtual ~CriteriaNot();
123 
124  virtual void replaceChild( CriteriaNode *child, CriteriaNode *replacement );
125 
126 protected:
128 };
129 
131 
133 {
134 public:
135  virtual CriteriaNode * unhook();
136  virtual CriteriaNode * unhook( CriteriaNode *child );
137  virtual std::vector< CriteriaNode* >getChildren() const;
138 
139  virtual CriteriaNode * clone() const = 0;
141  virtual ~CriteriaBinaryOperator();
142 
143  virtual void replaceChild( CriteriaNode *child, CriteriaNode *replacement );
144 
145 protected:
148 };
149 
151 
153 {
154 public:
155  virtual bool isDestination( unsigned system ) const;
156  virtual std::string getDescription() const;
157  virtual std::string getText() const;
158 
159  virtual CriteriaNode * clone() const;
160  CriteriaAnd( CriteriaNode *child, CriteriaNode *newNode ) :
161  CriteriaBinaryOperator( child, newNode ) {}
162  virtual ~CriteriaAnd() {}
163 };
164 
166 
168 {
169 public:
170  virtual bool isDestination( unsigned system ) const;
171  virtual std::string getDescription() const;
172  virtual std::string getText() const;
173 
174  virtual CriteriaNode * clone() const;
175  CriteriaOr( CriteriaNode *child, CriteriaNode *newNode ) :
176  CriteriaBinaryOperator( child, newNode ) {}
177  virtual ~CriteriaOr() {}
178 };
179 
181 
183 {
184 public:
185  virtual CriteriaNode * unhook();
186  virtual std::vector< CriteriaNode* >getChildren() const;
187 
188  virtual CriteriaNode * clone() const = 0;
189  CriteriaLeaf( CriteriaParent *parent, std::string value ) :
190  CriteriaNode( parent )
191  , m_value( value ) {}
192 
193  virtual ~CriteriaLeaf() {}
194 
195 protected:
196  std::string m_value;
197 };
198 
200 
202 {
203 public:
204  virtual bool isDestination( unsigned system ) const;
205  virtual std::string getDescription() const;
206  virtual std::string getText() const;
207 
208  virtual CriteriaNode * clone() const;
209  CriteriaContains( std::string value, CriteriaParent *parent = NULL ) :
210  CriteriaLeaf( parent, value ) {}
211  virtual ~CriteriaContains() {}
212 
213 private:
214  static void beginElement( void *userData, const XML_Char *name, const XML_Char **atts );
215  static void endElement( void *userData, const XML_Char *name );
216  std::set< std::string >getPlanetTypesFromXML( const char *filename ) const;
217 };
218 
220 
222 {
223 public:
224  virtual bool isDestination( unsigned system ) const;
225  virtual std::string getDescription() const;
226  virtual std::string getText() const;
227 
228  virtual CriteriaNode * clone() const;
229  CriteriaOwnedBy( std::string value, CriteriaParent *parent = NULL ) :
230  CriteriaLeaf( parent, value ) {}
231  virtual ~CriteriaOwnedBy() {}
232 };
233 
235 
237 {
238 public:
239  virtual bool isDestination( unsigned system ) const;
240  virtual std::string getDescription() const;
241  virtual std::string getText() const;
242 
243  virtual CriteriaNode * clone() const;
244  CriteriaSector( std::string value, CriteriaParent *parent = NULL ) :
245  CriteriaLeaf( parent, value ) {}
246  virtual ~CriteriaSector() {}
247 };
248 
249 #endif
250