2 #ifndef _MULTIPLY_NODE_CPP_
3 #define _MULTIPLY_NODE_CPP_
5 #ifndef _MADARA_NO_KARL_
38 if (nodes_.size() >= 2)
41 for (ComponentNodes::iterator i = nodes_.begin(); i != nodes_.end();
44 bool value_changes =
false;
46 value = (*i)->prune(value_changes);
47 if (!value_changes &&
dynamic_cast<LeafNode*
>(*i) == 0)
50 *i =
new LeafNode(*(this->logger_), value);
56 return_value *= value;
58 can_change = can_change || value_changes;
64 "madara::expression::SystemCallLogLevel: "
65 "KARL COMPILE ERROR: "
66 "Multiplication is impossible without at least two values\n");
69 "madara::expression::SystemCallLogLevel: "
70 "KARL COMPILE ERROR: "
71 "Multiplication is impossible without at least two values\n");
86 for (ComponentNodes::iterator i = nodes_.begin(); i != nodes_.end(); ++i, ++j)
93 return_value *= value;
102 visitor.
visit(*
this);
#define madara_logger_ptr_log(loggering, level,...)
Fast version of the madara::logger::log method for Logger pointers.
madara::knowledge::KnowledgeRecord KnowledgeRecord
An exception for unrecoverable KaRL compilation issues.
virtual ~CompositeMultiplyNode(void)
Destructor.
virtual madara::knowledge::KnowledgeRecord evaluate(const madara::knowledge::KnowledgeUpdateSettings &settings)
Evaluates the expression tree.
CompositeMultiplyNode(logger::Logger &logger, const ComponentNodes &nodes)
Constructor.
virtual madara::knowledge::KnowledgeRecord item(void) const
Returns the printable character of the node.
virtual void accept(Visitor &visitor) const
Accepts a visitor subclassed from the Visitor class.
virtual madara::knowledge::KnowledgeRecord prune(bool &can_change)
Prunes the expression tree of unnecessary nodes.
Defines a node that contains a madara::knowledge::KnowledgeRecord::Integer value.
Abstract base class for all visitors to all classes that derive from ComponentNode.
virtual void visit(const LeafNode &node)=0
Visit a LeafNode.
This class encapsulates an entry in a KnowledgeBase.
Settings for applying knowledge updates.
A multi-threaded logger for logging to one or more destinations.
std::deque< ComponentNode * > ComponentNodes
a vector of Component Nodes
Provides knowledge logging services to files and terminals.
Copyright(c) 2020 Galois.