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