Grail (C++)  1.3.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 data
21 {
22  struct PlannerActionSnapshot;
23 }
24 
25 namespace planner
26 {
28  {
30  public:
31  virtual ~ParametrizedObject() = default;
32 
37  void MergeParameters(const ParametrizedObject& other);
38 
40  std::size_t GetParametersSize() const;
41 
43  bool Contains(const std::string& paramName) const;
44 
47  template <typename ParameterType>
48  void SetParameter(const std::string& paramName, const ParameterType& paramValue)
49  {
50  parameters[paramName] = &memory->template Emplace<TypedObjectParameter<ParameterType>>(paramValue);
51  }
52 
54  template <typename ParameterType>
55  ParameterType GetParameterValue(const std::string& paramName) const
56  {
57  auto param = GetParameter(paramName);
58  if(param != nullptr)
59  {
60  return param->GetValue<ParameterType>();
61  }
62  return ParameterType();
63  }
64 
66  bool CollectionContains(const std::string& collectionName, unsigned int objectIndex) const;
67 
70  void AddCollection(const std::string& collectionName);
71 
74  std::set<unsigned int>* GetCollection(const std::string& name);
75 
78  const std::set<unsigned int>* GetCollection(const std::string& name) const;
79 
81  bool HasEqualParams(const ParametrizedObject& other) const;
82 
88  std::function<void(const ParametrizedObject& object,
89  std::map<std::string, std::string>& nameValues)> function);
90 
91  ParametrizedObject& operator =(const ParametrizedObject& other);
92  ParametrizedObject& operator=(ParametrizedObject&& other) = default;
93 
94  protected:
97  ParametrizedObject(ParametrizedObject&& other) = default;
98 
99  std::map<std::string, ObjectParameter*> parameters{};
100  std::map<std::string, std::set<unsigned int>> indexCollections{};
101  MemoryPool* memory;
102 
103  private:
104  const ObjectParameter* GetParameter(const std::string& paramName) const;
105  ObjectParameter* GetParameter(const std::string& paramName);
106  void SerializeSnapshot(std::map<std::string, std::string>& nameValues) const;
107 
108  std::function<void(const ParametrizedObject& object, std::map<std::string, std::string>&)>serializeSnapshotFunction = nullptr;
109  };
110 }
111 }
112 
113 #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::ParametrizedObject::MergeParameters
void MergeParameters(const ParametrizedObject &other)
MergeParameters - Adds other parameters to own, replacing parameter with other in case of conflict.
Definition: ParametrizedObject.cpp:60
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::GetCollection
std::set< unsigned int > * GetCollection(const std::string &name)
Definition: ParametrizedObject.cpp:88
grail::planner::ParametrizedObject::AddCollection
void AddCollection(const std::string &collectionName)
Definition: ParametrizedObject.cpp:83
grail::planner::ParametrizedObject::HasEqualParams
bool HasEqualParams(const ParametrizedObject &other) const
true if the other object contains identical set of parameters (including the contents of collections)
Definition: ParametrizedObject.cpp:108
grail::planner::ParametrizedObject::SetSerializeSnapshotFunction
void SetSerializeSnapshotFunction(std::function< void(const ParametrizedObject &object, std::map< std::string, std::string > &nameValues)> function)
SetSerializeSnapshotFunction - Sets a function serializing a snapshot of parameter values to string.
Definition: ParametrizedObject.cpp:149
grail::planner::ParametrizedObject::SetParameter
void SetParameter(const std::string &paramName, const ParameterType &paramValue)
Definition: ParametrizedObject.hh:48
grail::planner::ParametrizedObject
Definition: ParametrizedObject.hh:27
grail::planner::ParametrizedObject::GetParameterValue
ParameterType GetParameterValue(const std::string &paramName) const
Definition: ParametrizedObject.hh:55
grail::data::PlannerActionSnapshot
Definition: PlannerSnapshots.h:45