]> ruin.nu Git - popboot.git/blobdiff - action.h
delete remaining actions
[popboot.git] / action.h
index 4550771568b6b7a73d7286db32751d147126042d..606857d8524ade62545f3455d8984e0dfbe4325a 100644 (file)
--- a/action.h
+++ b/action.h
@@ -1,13 +1,57 @@
 #ifndef __ACTION_H__
 #define __ACTION_H__
 
+#include <vector>
+#include <string>
+#include <ext/hash_map>
+
+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, const Preconditions& preconditions, std::string executable, const EffectsMap& effects);
+               Action(const Action& action);
+               Action(){};
+               const Literals& effects(int value) const;
+               const Preconditions& preconditions() const;
+               const std::string& name() const;
+               int execute() const;
 
        protected:
-               std::string executable;
-               std::vector<string> preconditions;
-               std::vector<string> effects;
-
+               std::string _name;
+               std::string _executable;
+               Preconditions _preconditions;
+               EffectsMap _effects;
+               static const Literals _empty;
 };
 
+
 #endif