Grail (C++)  1.4.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 {
31  {
33  public:
34  virtual ~ParametrizedObject() = default;
35 
40  void MergeParameters(const ParametrizedObject& other);
41 
43  std::size_t GetParametersSize() const;
44 
46  bool Contains(const std::string& paramName) const;
47 
52  template <typename ParameterType>
53  void SetParameter(const std::string& paramName, const ParameterType& paramValue)
54  {
55  parameters[paramName] = &memory->template Emplace<TypedObjectParameter<ParameterType>>(paramValue);
56  }
57 
59  template <typename ParameterType>
60  ParameterType GetParameterValue(const std::string& paramName) const
61  {
62  auto param = GetParameter(paramName);
63  if(param != nullptr)
64  {
65  return param->GetValue<ParameterType>();
66  }
67  return ParameterType();
68  }
69 
71  bool CollectionContains(const std::string& collectionName, unsigned int objectIndex) const;
72 
76  void AddCollection(const std::string& collectionName);
77 
80  std::set<unsigned int>* GetCollection(const std::string& name);
81 
84  const std::set<unsigned int>* GetCollection(const std::string& name) const;
85 
87  bool HasEqualParams(const ParametrizedObject& other) const;
88 
94  std::function<void(const ParametrizedObject& object,
95  std::map<std::string, std::string>& nameValues)> function);
96 
97  ParametrizedObject& operator =(const ParametrizedObject& other);
98  ParametrizedObject& operator=(ParametrizedObject&& other) = default;
99 
100  protected:
103  ParametrizedObject(ParametrizedObject&& other) = default;
104 
105  std::map<std::string, ObjectParameter*> parameters{};
106  std::map<std::string, std::set<unsigned int>> indexCollections{};
107  MemoryPool* memory;
108 
109  private:
110  const ObjectParameter* GetParameter(const std::string& paramName) const;
111  ObjectParameter* GetParameter(const std::string& paramName);
112  void SerializeSnapshot(std::map<std::string, std::string>& nameValues) const;
113 
114  std::function<void(const ParametrizedObject& object, std::map<std::string, std::string>&)>serializeSnapshotFunction = nullptr;
115  };
116 }
117 }
118 
119 #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 the own one, replacing parameter with those of other in ca...
Definition: ParametrizedObject.cpp:60
grail::planner::MemoryPool
The MemoryPool class - preallocated memory container for optimization issues.
Definition: MemoryPool.hh:79
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
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:53
grail::planner::ParametrizedObject
The base class for parametrized objects (objects with parameters) used by the planning algorithm for ...
Definition: ParametrizedObject.hh:30
grail::planner::ParametrizedObject::GetParameterValue
ParameterType GetParameterValue(const std::string &paramName) const
Definition: ParametrizedObject.hh:60
grail::data::PlannerActionSnapshot
Definition: PlannerSnapshots.h:45