+ public:
+ /**
+ * Creates a node for the given action.
+ */
+ Node(const Action* action);
+
+ /**
+ * Creates an empty, non-functional, node.
+ */
+ Node();
+
+ /**
+ * Creates a copy of the given node.
+ */
+ Node(const Node& node);
+ virtual ~Node(){}
+
+ /**
+ * Add a child node, which will be executed after this node.
+ */
+ void addChild(Node* node);
+
+ /**
+ * Returns the action this node corresponds to.
+ */
+ const Action* action() const;
+
+ /**
+ * Execute this node, and hence the corresponding action.
+ * Sets the effects achieved.
+ *
+ * If _executed is true or _preconditions.size() > 0 this method will
+ * just return.
+ */
+ void execute();
+
+ /**
+ * Checks if this node has been executed or not.
+ */
+ bool executed() const;
+
+ /**
+ * Returns the effects that was achieved from execution.
+ */
+ const Literals& effects() const;
+
+ /**
+ * Satisfy a single condition.
+ */
+ bool satisfyCondition(std::string effect);
+
+ /**
+ * Satisfies a list of conditions.
+ */
+ bool satisfyConditions(const Literals& effects);
+
+ /**
+ * Returns all the children to this node.
+ */
+ const std::vector<Node*>& children() const;
+
+ /**
+ * Returns the unsatisfied preconditions.
+ */
+ const Preconditions& preconditions() const;
+