#include <ext/hash_map>
#include <vector>
+#include <queue>
+#include <pthread.h>
+#include <semaphore.h>
#include "action.h"
class Node;
-
-
-namespace __gnu_cxx {
-
- template< typename CharT, typename Traits, typename Alloc >
- struct hash< std::basic_string<CharT, Traits, Alloc> > {
- size_t operator()(const std::basic_string<CharT, Traits, Alloc>& s) const {
-
- const std::collate<CharT>& c = std::use_facet< std::collate<CharT> >(std::locale());
-
- return c.hash(s.c_str(), s.c_str() + s.size());
-
-}
-
- };
-
- template< typename CharT, typename Traits, typename Alloc >
- struct hash< const std::basic_string<CharT, Traits, Alloc> > { //yes you need this version aswell!
-
-size_t operator()(const std::basic_string<CharT, Traits, Alloc>& s) const {
-
- const std::collate<CharT>& c = std::use_facet< std::collate<CharT> >(std::locale());
-
- return c.hash(s.c_str(), s.c_str() + s.size());
- }
-
- };
-};
-
class Planner {
public:
- Planner(std::vector<Action> actions, literals init, literals goal);
+ Planner(std::vector<Action> actions, Literals init, Literals goal);
~Planner();
void execute();
+
protected:
void makePlan(Node* node);
void addNode(Node* node);
+
+ sem_t _nodes;
+ sem_t _list;
+ std::queue<Node*> _executedNodes;
Node* _start;
- __gnu_cxx::hash_map<std::string,Node*> _addedNodes;
- __gnu_cxx::hash_map<std::string,Action*> _actions;
- literals _init;
- literals _goal;
+ 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;
};
#endif