4 #include <ext/hash_map>
9 // These are needed to be able to use std::string as key in a hash_map.
11 template< typename CharT, typename Traits, typename Alloc >
12 struct hash< std::basic_string<CharT, Traits, Alloc> > {
13 size_t operator()(const std::basic_string<CharT, Traits, Alloc>& s) const {
15 const std::collate<CharT>& c = std::use_facet< std::collate<CharT> >(std::locale());
17 return c.hash(s.c_str(), s.c_str() + s.size());
23 template< typename CharT, typename Traits, typename Alloc >
24 struct hash< const std::basic_string<CharT, Traits, Alloc> > { //yes you need this version aswell!
26 size_t operator()(const std::basic_string<CharT, Traits, Alloc>& s) const {
28 const std::collate<CharT>& c = std::use_facet< std::collate<CharT> >(std::locale());
30 return c.hash(s.c_str(), s.c_str() + s.size());
36 enum StreetType{foot, car, both};
37 enum PlayerType{robber, cop_foot, cop_car};
38 enum IntersectionType{hq, bank, robber_start, ordinary};
41 __gnu_cxx::hash_map<std::string,StreetType> connections;
42 IntersectionType type;
58 T value(std::string input);
71 virtual int operator()(const SPInfo* node) const = 0;
76 Bot(const std::string& name, PlayerType type);
84 virtual std::string turn() = 0;
85 virtual void preGamePreparations(){};
86 void move(std::string location);
88 std::list<std::string> shortestPath(const std::string& from, PlayerType type, const SPGoal& goal, bool reverse = false);
90 __gnu_cxx::hash_map<std::string, Intersection> _intersections;
91 __gnu_cxx::hash_map<std::string, Player> _players;
92 __gnu_cxx::hash_map<std::string, int> _banks;
93 std::map<int, std::string> _evidence;
94 std::map<PlayerType, std::string> _playerTypeNames;
95 std::map<std::string, PlayerType> _playerTypes;
98 std::string _location;
104 class SimpleSPGoal : public SPGoal{
107 SimpleSPGoal(std::string to);
108 int operator()(const SPInfo* node) const;
111 class FindPlayer : public SPGoal{
113 const __gnu_cxx::hash_map<std::string, Player>& _players;
116 FindPlayer(const __gnu_cxx::hash_map<std::string, Player>& players, PlayerType type, int limit = 0);
117 int operator()(const SPInfo* node) const;