#ifndef __PLANNER_H__
#define __PLANNER_H__
-#include <hash_map>
-#include "node.h"
+#include <ext/hash_map>
+#include <vector>
+#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);
+
+ void execute();
protected:
- Node start;
- std::hash_map<string,Node*> addedNodes;
+
+ void makePlan(Node* node);
+ void addNode(Node* node);
+
+ Node* _start;
+ __gnu_cxx::hash_map<std::string,Node*> _addedNodes;
+ __gnu_cxx::hash_map<std::string,Action> _actions;
};
#endif