MADARA  3.4.1
IteratorImpl.h
Go to the documentation of this file.
1 /* -*- C++ -*- */
2 #ifndef _MADARA_TREE_ITERATOR_IMPL_H_
3 #define _MADARA_TREE_ITERATOR_IMPL_H_
4 
5 #include <stdlib.h>
6 #include <stdexcept>
7 
11 
12 namespace madara
13 {
14 namespace utility
15 {
16 template<typename T>
17 class Refcounter;
18 }
19 
20 namespace expression
21 {
22 class ComponentNode;
23 class ExpressionTreeIterator;
24 class ExpressionTree;
25 
42 {
43  friend class ExpressionTreeIterator;
44 
45 public:
48 
50  virtual ~ExpressionTreeIteratorImpl(void);
51 
54  virtual ExpressionTree operator*(void) = 0;
55 
58  virtual const ExpressionTree operator*(void)const = 0;
59 
61  virtual void operator++(void) = 0;
62 
64  virtual bool operator==(const ExpressionTreeIteratorImpl& rhs) const = 0;
65 
67  virtual bool operator!=(const ExpressionTreeIteratorImpl& rhs) const = 0;
68 
70  virtual ExpressionTreeIteratorImpl* clone(void) = 0;
71 
73  typedef ::std::forward_iterator_tag iterator_category;
75  typedef int* pointer;
76  typedef int& reference;
77  typedef int difference_type;
78 
79 protected:
82 };
83 
92 {
93  friend class ExpressionTreeIterator;
95 
96 public:
100  InOrderIteratorImpl(const ExpressionTree& tree, bool end_iter = false);
101 
103  virtual ~InOrderIteratorImpl(void);
104 
107  virtual ExpressionTree operator*(void);
108 
111  virtual const ExpressionTree operator*(void)const;
112 
114  virtual void operator++(void);
115 
117  virtual bool operator==(const ExpressionTreeIteratorImpl& rhs) const;
118 
120  virtual bool operator!=(const ExpressionTreeIteratorImpl& lhs) const;
121 
123  virtual ExpressionTreeIteratorImpl* clone(void);
124 
125  // = Necessary traits
126  typedef ::std::forward_iterator_tag iterator_category;
128  typedef int* pointer;
129  typedef int& reference;
130  typedef int difference_type;
131 
132 private:
135 };
136 
145 {
148 
149 public:
153  PreOrderIteratorImpl(const ExpressionTree& tree, bool end_iter = false);
154 
156  virtual ~PreOrderIteratorImpl();
157 
160  virtual ExpressionTree operator*(void);
161 
164  virtual const ExpressionTree operator*(void)const;
165 
167  virtual void operator++(void);
168 
170  virtual bool operator==(const ExpressionTreeIteratorImpl& rhs) const;
171 
173  virtual bool operator!=(const ExpressionTreeIteratorImpl& lhs) const;
174 
176  virtual ExpressionTreeIteratorImpl* clone(void);
177 
178  // = Necessary traits
179  typedef ::std::forward_iterator_tag iterator_category;
181  typedef int* pointer;
182  typedef int& reference;
183  typedef int difference_type;
184 
185 private:
188 };
189 
198 {
201 
202 public:
206  PostOrderIteratorImpl(const ExpressionTree& tree, bool end_iter = false);
207 
209  virtual ~PostOrderIteratorImpl(void);
210 
213  virtual ExpressionTree operator*(void);
214 
217  virtual const ExpressionTree operator*(void)const;
218 
220  virtual void operator++(void);
221 
223  virtual bool operator==(const ExpressionTreeIteratorImpl& rhs) const;
224 
226  virtual bool operator!=(const ExpressionTreeIteratorImpl& lhs) const;
227 
229  virtual ExpressionTreeIteratorImpl* clone(void);
230 
231  // = Necessary traits
232  typedef ::std::forward_iterator_tag iterator_category;
234  typedef int* pointer;
235  typedef int& reference;
236  typedef int difference_type;
237 
238 private:
241 };
242 
251 {
254 
255 public:
260  const ExpressionTree& tree, bool end_iter = false);
261 
264 
267  virtual ExpressionTree operator*(void);
268 
271  virtual const ExpressionTree operator*(void)const;
272 
274  virtual void operator++(void);
275 
277  virtual bool operator==(const ExpressionTreeIteratorImpl& rhs) const;
278 
280  virtual bool operator!=(const ExpressionTreeIteratorImpl& lhs) const;
281 
283  virtual ExpressionTreeIteratorImpl* clone(void);
284 
285  // = Necessary traits
286  typedef ::std::forward_iterator_tag iterator_category;
288  typedef int* pointer;
289  typedef int& reference;
290  typedef int difference_type;
291 
292 private:
294  // @@ Consider zapping this.
296 };
297 }
298 }
299 #endif /* _MADARA_TREE_ITERATOR_IMPL_H_ */
Implementation of the ExpressionTreeIterator pattern that is used to define the various iterations al...
Definition: IteratorImpl.h:42
virtual ExpressionTreeIteratorImpl * clone(void)=0
Method for cloning an impl. Necessary for post increments.
virtual const ExpressionTree operator*(void) const =0
Returns a const reference to the item contained at the current position.
ExpressionTreeIteratorImpl(const ExpressionTree &tree)
Construct an ExpressionTreeIteratorImpl to iterate over a tree.
virtual void operator++(void)=0
Increment operator (used for both pre- and post-increment).
madara::knowledge::KnowledgeRecord value_type
Definition: IteratorImpl.h:74
virtual bool operator==(const ExpressionTreeIteratorImpl &rhs) const =0
Equality operator.
virtual bool operator!=(const ExpressionTreeIteratorImpl &rhs) const =0
Nonequality operator.
const ExpressionTree & tree_
The tree we are iterating over.
Definition: IteratorImpl.h:81
virtual ExpressionTree operator*(void)=0
Dereference operator returns a reference to the item contained at the current position.
::std::forward_iterator_tag iterator_category
= Necessary traits
Definition: IteratorImpl.h:73
Non-const iterator for traversing an expression tree.
Definition: Iterator.h:27
Encapsulates a MADARA KaRL expression into an evaluatable tree.
Iterates through an ExpressionTree in in-order.
Definition: IteratorImpl.h:92
virtual bool operator==(const ExpressionTreeIteratorImpl &rhs) const
Equality operator.
InOrderIteratorImpl(const ExpressionTree &tree, bool end_iter=false)
Construct an InOrderIteratorImpl.
virtual bool operator!=(const ExpressionTreeIteratorImpl &lhs) const
Nonequality operator.
madara::utility::LStack< ExpressionTree > stack_
Our current position in the iteration.
Definition: IteratorImpl.h:134
virtual void operator++(void)
Increment operator (used for both pre- and post-increment).
virtual ExpressionTree operator*(void)
Dereference operator returns a reference to the item contained at the current position.
::std::forward_iterator_tag iterator_category
Definition: IteratorImpl.h:126
virtual ExpressionTreeIteratorImpl * clone(void)
Method for cloning an impl. Necessary for post increments.
madara::knowledge::KnowledgeRecord value_type
Definition: IteratorImpl.h:127
Iterates through an ExpressionTree in level-order.
Definition: IteratorImpl.h:251
virtual bool operator!=(const ExpressionTreeIteratorImpl &lhs) const
Nonequality operator.
virtual bool operator==(const ExpressionTreeIteratorImpl &rhs) const
Equality operator.
virtual ExpressionTree operator*(void)
Dereference operator returns a reference to the item contained at the current position.
virtual ExpressionTreeIteratorImpl * clone(void)
Method for cloning an impl. Necessary for post increments.
madara::utility::LQueue< ExpressionTree > queue_
Our current position in the iteration.
Definition: IteratorImpl.h:295
virtual void operator++(void)
Increment operator (used for both pre- and post-increment).
LevelOrderExpressionTreeIteratorImpl(const ExpressionTree &tree, bool end_iter=false)
Construct an LevelOrderExpressionTreeIterator.
Iterates through an ExpressionTree in post-order.
Definition: IteratorImpl.h:198
PostOrderIteratorImpl(const ExpressionTree &tree, bool end_iter=false)
Construct an PostOrderIteratorImpl.
madara::knowledge::KnowledgeRecord value_type
Definition: IteratorImpl.h:233
virtual void operator++(void)
Increment operator (used for both pre- and post-increment).
virtual bool operator!=(const ExpressionTreeIteratorImpl &lhs) const
Nonequality operator.
madara::utility::LStack< ExpressionTree > stack_
Our current position in the iteration.
Definition: IteratorImpl.h:240
virtual ExpressionTreeIteratorImpl * clone(void)
Method for cloning an impl. Necessary for post increments.
virtual bool operator==(const ExpressionTreeIteratorImpl &rhs) const
Equality operator.
virtual ExpressionTree operator*(void)
Dereference operator returns a reference to the item contained at the current position.
::std::forward_iterator_tag iterator_category
Definition: IteratorImpl.h:232
Iterates through an ExpressionTree in level-order.
Definition: IteratorImpl.h:145
virtual bool operator!=(const ExpressionTreeIteratorImpl &lhs) const
Nonequality operator.
madara::utility::LStack< ExpressionTree > stack_
Our current position in the iteration.
Definition: IteratorImpl.h:187
madara::knowledge::KnowledgeRecord value_type
Definition: IteratorImpl.h:180
virtual ExpressionTree operator*(void)
Dereference operator returns a reference to the item contained at the current position.
::std::forward_iterator_tag iterator_category
Definition: IteratorImpl.h:179
virtual ExpressionTreeIteratorImpl * clone(void)
Method for cloning an impl. Necessary for post increments.
virtual bool operator==(const ExpressionTreeIteratorImpl &rhs) const
Equality operator.
virtual void operator++(void)
Increment operator (used for both pre- and post-increment).
PreOrderIteratorImpl(const ExpressionTree &tree, bool end_iter=false)
Construct an LevelOrderExpressionTreeIterator.
This class encapsulates an entry in a KnowledgeBase.
Defines a generic "first-in/first-out" (FIFO) Abstract Data Type (ADT) using a circular linked list.
Definition: LQueue.h:39
Defines a generic "last-in/first-out" (LIFO) Abstract Data Type (ADT) using a stack that's implemente...
Definition: LStack.h:30
This template class provides transparent reference counting of its template parameter T.
Definition: Refcounter.h:22
Provides utility functions and classes for common tasks and needs.
Definition: IteratorImpl.h:15
Copyright(c) 2020 Galois.