HOPS
HOPS class reference
MHO_ClassIdentityMap.hh
Go to the documentation of this file.
1 #ifndef MHO_ClassIdentityMap_HH__
2 #define MHO_ClassIdentityMap_HH__
3 
5 #include "MHO_ClassIdentity.hh"
9 #include "MHO_UUID.hh"
10 
11 #include <iostream>
12 #include <map>
13 #include <string>
14 
15 namespace hops
16 {
17 
30 {
31  public:
33 
35  {
36  for(auto it = fFactoryMap.begin(); it != fFactoryMap.end(); it++)
37  {
38  delete it->second;
39  }
40 
41  for(auto it = fJSONConverterMap.begin(); it != fJSONConverterMap.end(); it++)
42  {
43  delete it->second;
44  }
45  };
46 
52  template< typename XClassType > void AddClassType()
53  {
55  std::string name = MHO_ClassIdentity::ClassName< XClassType >();
56  fMD5Generator << name;
59  AddToMap(type_uuid, name);
60  //add a factory for these types of objects
61  auto it = fFactoryMap.find(type_uuid);
62  if(it == fFactoryMap.end())
63  {
65  }
66 
67  auto it2 = fJSONConverterMap.find(type_uuid);
68  if(it2 == fJSONConverterMap.end())
69  {
71  }
72  };
73 
80  template< typename XClassType > void AddClassType(const XClassType& obj)
81  {
83  std::string name = MHO_ClassIdentity::ClassName(obj);
84  fMD5Generator << name;
87  AddToMap(type_uuid, name);
88  //add a factory for these types of objects
89  auto it = fFactoryMap.find(type_uuid);
90  if(it == fFactoryMap.end())
91  {
93  }
94 
95  auto it2 = fJSONConverterMap.find(type_uuid);
96  if(it2 == fJSONConverterMap.end())
97  {
99  }
100  };
101 
108  template< typename XClassType > std::string GetClassNameFromObject(const XClassType& obj)
109  {
110  std::string name = MHO_ClassIdentity::ClassName(obj);
111  return name;
112  };
113 
120  std::string GetClassNameFromUUID(const MHO_UUID& uuid) const
121  {
122  std::map< MHO_UUID, std::string >::const_iterator it = fUUID2ClassName.find(uuid);
123  if(it != fUUID2ClassName.end())
124  {
125  return std::string(it->second);
126  }
127  else
128  {
129  return std::string("unknown");
130  }
131  };
132 
139  MHO_UUID GetUUIDFromClassName(const std::string& name) const
140  {
141  MHO_UUID tmp;
142  const auto it = fClassName2UUID.find(name);
143  if(it != fClassName2UUID.end())
144  {
145  tmp = it->second;
146  }
147  return tmp;
148  };
149 
155  template< typename XClassType > MHO_UUID GetUUIDFor() const
156  {
157  std::string name = MHO_ClassIdentity::ClassName< XClassType >();
158  return GetUUIDFromClassName(name);
159  }
160 
167  bool IsTypePresent(const MHO_UUID& uuid) const
168  {
169  auto it = fUUID2ClassName.find(uuid);
170  if(it != fUUID2ClassName.end())
171  {
172  return true;
173  }
174  return false;
175  }
176 
177 
188  {
189  auto it = fFactoryMap.find(uuid);
190  if(it != fFactoryMap.end())
191  {
192  return fFactoryMap[uuid]->Build();
193  }
194  else
195  {
196  return nullptr;
197  }
198  }
199 
200  protected:
207  void AddToMap(const MHO_UUID& type_uuid, const std::string& name)
208  {
209  fUUID2ClassName[type_uuid] = name;
210  fClassName2UUID[name] = type_uuid;
211  };
212 
214  std::map< MHO_UUID, std::string > fUUID2ClassName;
215  std::map< std::string, MHO_UUID > fClassName2UUID;
216  std::map< MHO_UUID, MHO_SerializableObjectFactory* > fFactoryMap;
217  std::map< MHO_UUID, MHO_JSONConverter* > fJSONConverterMap;
218 };
219 
220 } // namespace hops
221 
222 #endif
Class MHO_ClassIdentityMap.
Definition: MHO_ClassIdentityMap.hh:30
void AddClassType(const XClassType &obj)
Function AddClassType, overload provided for passing object reference.
Definition: MHO_ClassIdentityMap.hh:80
std::string GetClassNameFromObject(const XClassType &obj)
Getter for class name from object.
Definition: MHO_ClassIdentityMap.hh:108
std::map< MHO_UUID, MHO_JSONConverter * > fJSONConverterMap
Definition: MHO_ClassIdentityMap.hh:217
MHO_UUID GetUUIDFromClassName(const std::string &name) const
Getter for uuid from class name.
Definition: MHO_ClassIdentityMap.hh:139
MHO_UUID GetUUIDFor() const
Getter for uuid for a class type.
Definition: MHO_ClassIdentityMap.hh:155
std::map< MHO_UUID, std::string > fUUID2ClassName
Definition: MHO_ClassIdentityMap.hh:214
MHO_MD5HashGenerator fMD5Generator
Definition: MHO_ClassIdentityMap.hh:211
std::map< MHO_UUID, MHO_SerializableObjectFactory * > fFactoryMap
Definition: MHO_ClassIdentityMap.hh:216
void AddToMap(const MHO_UUID &type_uuid, const std::string &name)
Adds an entry to the UUID-name map and its reverse map.
Definition: MHO_ClassIdentityMap.hh:207
std::map< std::string, MHO_UUID > fClassName2UUID
Definition: MHO_ClassIdentityMap.hh:215
void AddClassType()
Function AddClassType, adds a class of a particular type to the identity map.
Definition: MHO_ClassIdentityMap.hh:52
std::string GetClassNameFromUUID(const MHO_UUID &uuid) const
Getter for class name from uuid.
Definition: MHO_ClassIdentityMap.hh:120
virtual ~MHO_ClassIdentityMap()
Definition: MHO_ClassIdentityMap.hh:34
bool IsTypePresent(const MHO_UUID &uuid) const
Checks if a UUID is present in the class name map.
Definition: MHO_ClassIdentityMap.hh:167
MHO_ClassIdentityMap()
Definition: MHO_ClassIdentityMap.hh:32
MHO_Serializable * GenerateContainerFromUUID(const MHO_UUID &uuid)
Generates a container from a UUID and returns a ptr to MHO_Serializable if found in factory map.
Definition: MHO_ClassIdentityMap.hh:187
Class MHO_ContainerJSONConverter.
Definition: MHO_ContainerJSONConverter.hh:194
Class MHO_MD5HashGenerator declares the concrete class which does the work for file streams.
Definition: MHO_MD5HashGenerator.hh:135
void Finalize()
Finalizes the MD5 hash calculation and stores the result in fDigest.
Definition: MHO_MD5HashGenerator.hh:156
MHO_UUID GetDigestAsUUID()
Getter for digest as uuid.
Definition: MHO_MD5HashGenerator.hh:182
void Initialize()
Recursive function to initialize a game state.
Definition: MHO_MD5HashGenerator.hh:144
Class MHO_SerializableObjectFactorySpecific.
Definition: MHO_SerializableObjectFactory.hh:68
Class MHO_Serializable.
Definition: MHO_Serializable.hh:26
Class MHO_UUID - a class for a 16 byte UUID (for object and type identification)
Definition: MHO_UUID.hh:27
Definition: MHO_ChannelLabeler.hh:17
static std::string ClassName()
Returns the class name as a string.
Definition: MHO_ClassIdentity.hh:36