MADARA  3.4.1
ExpressionTree.h
Go to the documentation of this file.
1 /* -*- C++ -*- */
2 
3 #ifndef _MADARA_KNOWLEDGE_EXPRESSION_TREE_H_
4 #define _MADARA_KNOWLEDGE_EXPRESSION_TREE_H_
5 
6 #ifndef _MADARA_NO_KARL_
7 
8 #include <string>
9 #include <stdexcept>
11 
15 
16 namespace madara
17 {
18 namespace expression
19 {
20 // Forward declarations.
21 class ExpressionTreeIterator;
22 class ExpressionTreeConstIterator;
23 
29 {
30 public:
31  // Define a "trait"
35 
41 
49  logger::Logger& logger, ComponentNode* root, bool increase_count = false);
50 
57 
62  ExpressionTree(const ExpressionTree& tree);
63 
67  ~ExpressionTree(void);
68 
73  ComponentNode* get_root(void);
74 
79  void operator=(const ExpressionTree& tree);
80 
85  bool is_null(void) const;
86 
92 
98 
107 
112  ExpressionTree left(void);
113 
118  ExpressionTree right(void);
119 
126  iterator begin(const std::string& traversal_order);
127 
134  iterator end(const std::string& traversal_order);
135 
142  const_iterator begin(const std::string& traversal_order) const;
143 
150  const_iterator end(const std::string& traversal_order) const;
151 
156  void accept(Visitor& visitor) const;
157 
158 private:
161 
164 };
165 }
166 }
167 
168 #endif // _MADARA_NO_KARL_
169 
170 #endif /* _MADARA_KNOWLEDGE_EXPRESSION_TREE_H_ */
An abstract base class defines a simple abstract implementation of an expression tree node.
Definition: ComponentNode.h:37
Constant iterator over an expression tree.
Definition: Iterator.h:77
Non-const iterator for traversing an expression tree.
Definition: Iterator.h:27
Encapsulates a MADARA KaRL expression into an evaluatable tree.
ExpressionTree(logger::Logger &logger= *logger::global_logger.get())
Constructor.
ExpressionTree left(void)
Returns the left expression of this tree.
madara::knowledge::KnowledgeRecord evaluate(const madara::knowledge::KnowledgeUpdateSettings &settings=knowledge::KnowledgeUpdateSettings())
Evaluates the expression tree.
iterator begin(const std::string &traversal_order)
Returns an iterator to the beginning of the expression tree.
bool is_null(void) const
Checks if root pointer is null.
ExpressionTree right(void)
Returns the right expression of this tree.
ComponentNode * get_root(void)
Returns the root node of the expression tree.
iterator end(const std::string &traversal_order)
Returns an iterator to the end of the expression tree.
ExpressionTreeIterator iterator
madara::knowledge::KnowledgeRecord value_type
logger::Logger * logger_
handle for logging information
void operator=(const ExpressionTree &tree)
Non-deep copies an expression tree into this instance.
madara::knowledge::KnowledgeRecord prune(void)
Prunes the expression tree of unnecessary nodes.
madara::utility::Refcounter< ComponentNode > root_
root of the expression tree
ExpressionTreeConstIterator const_iterator
madara::knowledge::KnowledgeRecord item(void) const
Returns value of tree.
void accept(Visitor &visitor) const
Accepts a visitor subclassed from the Visitor class.
Abstract base class for all visitors to all classes that derive from ComponentNode.
Definition: Visitor.h:93
This class encapsulates an entry in a KnowledgeBase.
Settings for applying knowledge updates.
A multi-threaded logger for logging to one or more destinations.
Definition: Logger.h:165
This template class provides transparent reference counting of its template parameter T.
Definition: Refcounter.h:22
constexpr string_t string
T get(const KnowledgeRecord &kr)
Get the value of a KnowlegeRecord.
Definition: GetRecord.h:121
Provides knowledge logging services to files and terminals.
Definition: GlobalLogger.h:12
MADARA_EXPORT utility::Refcounter< logger::Logger > global_logger
Copyright(c) 2020 Galois.