Grail (C++)  1.1.1
A multi-platform, modular, universal engine for embedding advanced AI in games.
ParametrizedObject.h
1 #ifndef GRAIL_PARAMETRIZED_OBJECT_H
2 #define GRAIL_PARAMETRIZED_OBJECT_H
3 
4 #include "TypedObjectParameter.h"
5 #include "../../MemoryPool.hh"
6 
7 #include <functional>
8 #include <map>
9 #include <memory>
10 #include <set>
11 #include <string>
12 #include <unordered_map>
13 #include <unordered_set>
14 #include <vector>
15 
16 namespace grail
17 {
18  namespace planning
19  {
21  {
22  public:
23  virtual ~ParametrizedObject() = default;
24 
25  //REVIEW: dox comments
26  void MergeParameters(const ParametrizedObject& other);
27 
29  std::size_t GetParametersSize() const;
30 
32  bool Contains(const std::string& paramName) const;
33 
36  template <typename ParameterType>
37  void SetParameter(const std::string& paramName, const ParameterType& paramValue)
38  {
39  parameters[paramName] = &memory->template Emplace<TypedObjectParameter<ParameterType>>(paramValue);
40  }
41 
43  template <typename ParameterType>
44  ParameterType GetParameterValue(const std::string& paramName) const
45  {
46  auto param = GetParameter(paramName);
47  if(param != nullptr)
48  {
49  return param->GetValue<ParameterType>();
50  }
51  return ParameterType();
52  }
53 
55  bool CollectionContains(const std::string& collectionName, unsigned int objectIndex) const;
56 
58  void AddCollection(const std::string& collectionName);
59  std::set<unsigned int>* GetCollection(const std::string& name);
60  const std::set<unsigned int>* GetCollection(const std::string& name) const;
61 
62  bool HasEqualParams(const ParametrizedObject& other) const;
63  void SerializeSnapshot(std::map<std::string, std::string>& nameValues) const;
64  void SetSerializeSnapshotFunction(
65  std::function<void(const ParametrizedObject& object,
66  std::map<std::string, std::string>& nameValues)> function);
67 
68  ParametrizedObject& operator =(const ParametrizedObject& other);
69  ParametrizedObject& operator=(ParametrizedObject&& other) = default;
70 
71  protected:
74  ParametrizedObject(ParametrizedObject&& other) = default;
75 
76  std::map<std::string, ObjectParameter*> parameters{};
77  std::map<std::string, std::set<unsigned int>> indexCollections{};
78  MemoryPool* memory;
79 
80  private:
81  const ObjectParameter* GetParameter(const std::string& paramName) const;
82  ObjectParameter* GetParameter(const std::string& paramName);
83  std::function<void(const ParametrizedObject& object, std::map<std::string, std::string>&)>
84  serializeSnapshotFunction = nullptr;
85  };
86  }
87 }
88 #endif //GRAIL_PARAMETRIZED_OBJECT_H
grail::planning::ParametrizedObject::GetParameterValue
ParameterType GetParameterValue(const std::string &paramName) const
Definition: ParametrizedObject.h:44
grail::planning::ParametrizedObject
Definition: ParametrizedObject.h:20
grail::planning::ParametrizedObject::CollectionContains
bool CollectionContains(const std::string &collectionName, unsigned int objectIndex) const
Definition: ParametrizedObject.cpp:71
grail::MemoryPool
The MemoryPool class - preallocated memory container for optimization issues.
Definition: MemoryPool.hh:73
grail::planning::ParametrizedObject::SetParameter
void SetParameter(const std::string &paramName, const ParameterType &paramValue)
Definition: ParametrizedObject.h:37
grail::planning::ParametrizedObject::GetParametersSize
std::size_t GetParametersSize() const
Definition: ParametrizedObject.cpp:153
grail::planning::ParametrizedObject::Contains
bool Contains(const std::string &paramName) const
Definition: ParametrizedObject.cpp:66
grail::planning::ParametrizedObject::AddCollection
void AddCollection(const std::string &collectionName)
Creates a new id collection under the given name.
Definition: ParametrizedObject.cpp:81