BALL
1.4.1
|
00001 // -*- Mode: C++; tab-width: 2; -*- 00002 // vi: set ts=2: 00003 // 00004 // $Id: expressionTree.h,v 1.12 2005/10/23 12:02:18 oliver Exp $ 00005 // 00006 00007 #ifndef BALL_KERNEL_EXPRESSIONTREE_H 00008 #define BALL_KERNEL_EXPRESSIONTREE_H 00009 00010 #ifndef BALL_KERNEL_EXPRESSIONPREDICATE_H 00011 # include <BALL/KERNEL/expressionPredicate.h> 00012 #endif 00013 00014 namespace BALL 00015 { 00016 00025 class BALL_EXPORT ExpressionTree 00026 { 00027 public: 00028 00029 BALL_CREATE(ExpressionTree) 00030 00031 00034 00038 enum Type 00039 { 00041 INVALID = 0, 00043 LEAF, 00045 OR, 00047 AND 00048 }; 00050 00054 00060 ExpressionTree(); 00061 00065 ExpressionTree(const ExpressionTree& tree); 00066 00074 ExpressionTree(ExpressionPredicate* predicate, bool negate = false); 00075 00078 ExpressionTree(Type type, list<const ExpressionTree*> children, bool negate = false); 00079 00082 virtual ~ExpressionTree(); 00083 00085 00088 00091 virtual bool operator () (const Atom& atom) const; 00092 00095 bool operator == (const ExpressionTree& tree) const; 00096 00099 bool operator != (const ExpressionTree& tree) const; 00100 00102 00105 00108 void setType(Type type) ; 00109 00112 Type getType() const; 00113 00116 void setNegate(bool negate); 00117 00120 bool getNegate() const; 00121 00124 void setPredicate(ExpressionPredicate* predicate); 00125 00128 ExpressionPredicate* getPredicate() const; 00129 00132 void appendChild(const ExpressionTree* child); 00133 00136 const list<const ExpressionTree*>& getChildren() const; 00137 00139 00142 00145 ExpressionTree& operator = (const ExpressionTree& tree); 00146 00149 virtual void clear(); 00150 00152 00155 void dump(std::ostream& is = std::cout, Size depth = 0) const; 00157 00158 00159 protected: 00160 00161 /*_ A helper function for operator == () that compares the children of 00162 a node. 00163 */ 00164 bool compareChildren_(const ExpressionTree& tree) const; 00165 00166 /*_ The type of this node. 00167 */ 00168 Type type_; 00169 00170 /*_ Negation flag. If set, the value of this node will be negated. 00171 */ 00172 bool negate_; 00173 00174 /*_ A pointer to the predicate that this node represents. 00175 */ 00176 ExpressionPredicate* predicate_; 00177 00178 /*_ A list containing pointers to the children of this node. 00179 */ 00180 list<const ExpressionTree*> children_; 00181 00182 }; 00183 00184 } 00185 00186 #endif // BALL_KERNEL_EXPRESSIONTREE_H