2 #ifndef _EXPRESSION_TREE_CPP_
3 #define _EXPRESSION_TREE_CPP_
5 #ifndef _MADARA_NO_KARL_
136 TRAVERSAL_MAP::iterator iter = traversal_map_.find(traversal_order);
137 if (iter == traversal_map_.end())
144 return (this->*ptmf)(tree, end_iter);
154 : logger_(&
logger), root_(0)
162 : logger_(&
logger), root_(root, increase_count)
170 : logger_(&
logger), root_(t.root_)
178 : logger_(t.logger_), root_(t.root_)
207 return root_.get_ptr() == 0;
216 bool root_can_change =
false;
219 if (this->root_.get_ptr())
221 root_value = this->root_->prune(root_can_change);
222 if (!root_can_change &&
dynamic_cast<LeafNode*
>(this->root_.get_ptr()) == 0)
224 root_ =
new LeafNode(*(this->logger_), root_value);
236 if (root_.get_ptr() != 0)
237 return root_->evaluate(settings);
246 return root_.get_ptr();
254 return root_->item();
300 *non_const_this, traversal_order,
false));
312 *non_const_this, traversal_order,
true));
319 root_->accept(visitor);
static madara::expression::ExpressionTreeIteratorFactory tree_iterator_factory
madara::knowledge::KnowledgeRecord KnowledgeRecord
An abstract base class defines a simple abstract implementation of an expression tree node.
Constant iterator over an expression tree.
Implementation of a factory pattern that dynamically allocates the appropriate ExpressionTreeIterator...
ExpressionTreeIteratorImpl * make_in_order_tree_iterator(ExpressionTree &tree, bool end_iter)
Dynamically allocate a new ExpressionTreeLevelOrderIteratorImpl object based on the designated end_it...
::std::map< std::string, TRAVERSAL_PTMF > TRAVERSAL_MAP
ExpressionTreeIteratorImpl * make_level_order_tree_iterator(ExpressionTree &tree, bool end_iter)
Dynamically allocate a new ExpressionTreeLevelOrderIteratorImpl object based on the designated end_it...
TRAVERSAL_MAP traversal_map_
ExpressionTreeIteratorFactory(void)
Constructor.
ExpressionTreeIteratorImpl *(ExpressionTreeIteratorFactory::* TRAVERSAL_PTMF)(ExpressionTree &tree, bool end_iter)
ExpressionTreeIteratorImpl * make_pre_order_tree_iterator(ExpressionTree &tree, bool end_iter)
Dynamically allocate a new ExpressionTreePreOrderIteratorImpl object based on the designated end_iter...
ExpressionTreeIteratorImpl * make_tree_iterator(ExpressionTree &tree, const std::string &traversal_order, bool end_iter)
Dynamically allocate a new ExpressionTreeIteratorImpl object based on the designated traversal_order ...
ExpressionTreeIteratorImpl * make_post_order_tree_iterator(ExpressionTree &tree, bool end_iter)
Dynamically allocate a new ExpressionTreePostOrderIteratorImpl object based on the designated end_ite...
Implementation of the ExpressionTreeIterator pattern that is used to define the various iterations al...
Non-const iterator for traversing an expression tree.
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.
~ExpressionTree(void)
Destructor.
iterator end(const std::string &traversal_order)
Returns an iterator to the end of the expression tree.
ExpressionTreeIterator iterator
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.
Iterates through an ExpressionTree in in-order.
Defines a node that contains a madara::knowledge::KnowledgeRecord::Integer value.
Iterates through an ExpressionTree in level-order.
Iterates through an ExpressionTree in post-order.
Iterates through an ExpressionTree in level-order.
Abstract base class for all visitors to all classes that derive from ComponentNode.
This class encapsulates an entry in a KnowledgeBase.
Settings for applying knowledge updates.
A multi-threaded logger for logging to one or more destinations.
Provides knowledge logging services to files and terminals.
Copyright(c) 2020 Galois.