#include <string>
#include <ext/hash_map>
-typedef std::vector<std::string> literals;
-typedef std::vector<std::pair<std::string,literals> > preconditionsVector;
-typedef __gnu_cxx::hash_map<int,literals> effectsMap;
+typedef std::vector<std::string> Literals;
+typedef __gnu_cxx::hash_map<std::string,bool> Preconditions;
+typedef __gnu_cxx::hash_map<int,Literals> EffectsMap;
+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 Action {
public:
- Action(std::string name, preconditionsVector preconditions, effectsMap effects);
+ Action(std::string name, const Preconditions& preconditions, std::string executable, const EffectsMap& effects);
Action(const Action& action);
Action(){};
- const literals& effects(int value) const;
- const literals& preconditions() const;
+ const Literals& effects(int value) const;
+ const Preconditions& preconditions() const;
const std::string& name() const;
- bool nextExecutable();
int execute() const;
- void reset();
protected:
- preconditionsVector::const_iterator _currentPrecondition;
std::string _name;
- preconditionsVector _preconditions;
- effectsMap _effects;
- static const literals _empty;
+ std::string _executable;
+ Preconditions _preconditions;
+ EffectsMap _effects;
+ static const Literals _empty;
};
+
#endif