+
+ /**
+ * This method does the actual planning. Given the input node it will
+ * try to find all preconditions and create links from parent nodes
+ * to this node and, if the precondition did not have a node associated
+ * with it, create a new and recursively call this method for the newly
+ * created node.
+ *
+ * @param node The node which this method will find parent nodes for.
+ */
+ void makePlan(Node* node);
+
+ /**
+ * Adds this node to the internal map and vector.
+ */
+ void addNode(Node* node);
+
+ /**
+ * This method goes through the executed nodes and then calls
+ * executeChildren for these nodes.
+ */
+ void executePlan();
+ int executeChildren(Node* node);
+ void replan();
+ int cleanupExecution();
+
+ sem_t _nodes;
+ sem_t _list;
+ std::queue<Node*> _executedNodes;
+
+ Node* _start;
+ Node* _finish;
+ __gnu_cxx::hash_map<std::string,Node*> _addedEffects;
+ __gnu_cxx::hash_map<std::string,Action*> _actionEffects;
+ Literals _init;
+ Literals _goal;
+ std::vector<Node*> _addedNodes;
+ std::vector<Action*> _actions;