|
Grail (C++)
1.4.0
A multi-platform, modular, universal engine for embedding advanced AI in games.
|
3 #ifndef GRAIL_BLACKBOARD_H
4 #define GRAIL_BLACKBOARD_H
7 #include "../GrailLogger/LoggerManager.hh"
8 #include "BlackboardEntry.hh"
88 void SetValue(
const std::string& key,
const T& value)
90 std::lock_guard<std::mutex> lock{mutex};
91 SetValueInternal(key, value);
94 template <typename T, std::enable_if_t<!std::is_reference<T>::value>* =
nullptr>
102 std::lock_guard<std::mutex> lock{mutex};
103 SetValueInternal(key, value);
106 template <
typename T>
116 template <
typename T>
124 std::lock_guard<std::mutex> lock{mutex};
125 auto iterator = data.find(key);
126 if(iterator == data.end())
128 GRAIL_LOG(consts::DEFAULT_GRAIL_LOG_GROUP, logger::Severity::CRITICAL,
"Invalid key (" + key +
")");
131 return iterator->second.GetValue<T>();
134 template <
typename T>
142 std::lock_guard<std::mutex> lock{ mutex };
143 auto iterator = data.find(key);
144 if (iterator == data.end())
146 data[key].SetValue(T{});
147 return data[key].GetValue<T>();
150 return iterator->second.GetValue<T>();
153 template <
typename T>
162 std::lock_guard<std::mutex> lock{mutex};
164 auto iter = data.find(key);
165 if(iter != data.end())
167 outValue = iter->second.GetValue<T>();
178 void SerializeToMap(std::map<std::string, std::string>& outMap)
const;
181 std::map<std::string, BlackboardEntry> data{};
182 mutable std::mutex mutex{};
184 template <
typename T>
185 void SetValueInternal(
const std::string& key,
const T& value)
187 data[key].SetValue(value);
192 #endif //GRAIL_BLACKBOARD_H
size_t Size() const
Size.
Definition: Blackboard.cpp:71
static void TwoWayMerge(Blackboard &first, Blackboard &second, std::function< BlackboardEntry(const std::string &, const BlackboardEntry &, const BlackboardEntry &)> firstStrategy=OursStrategy, std::function< BlackboardEntry(const std::string &, const BlackboardEntry &, const BlackboardEntry &)> secondStrategy=OursStrategy)
TwoWayMerge - merges second blackboard into first and first into second, uses provided merge strategi...
Definition: Blackboard.cpp:20
bool TryGetValue(const std::string &key, T &outValue) const
TryGetValue - Checks whether blackboard contains given key. If it does, assigns keyed value to refere...
Definition: Blackboard.hh:160
void SerializeToMap(std::map< std::string, std::string > &outMap) const
SerializeToMap - converts the data stored in the blackboard to a map<key, value as string>
Definition: Blackboard.cpp:77
void Merge(const Blackboard &other, std::function< BlackboardEntry(const std::string &, const BlackboardEntry &, const BlackboardEntry &)> mergeStrategy=OursStrategy)
Merge - Merges data from other blackboard into this one. All conflicts are solved in favor of other b...
Definition: Blackboard.cpp:38
void SetDefaultValue(const std::string &key)
SetDefaultValue - Inserts default value of given type keyed with name into this blackboard....
Definition: Blackboard.hh:111
The Blackboard class - grail's universal data container.
Definition: Blackboard.hh:15
bool ContainsKey(const std::string &key) const
ContainsKey - Checks whether this blackboard contains given key.
Definition: Blackboard.cpp:65
void SetValue(const std::string &key, const T &value)
SetValue - Inserts value keyed with name into this blackboard. If key already exists new value is ass...
Definition: Blackboard.hh:88
void RemoveEntry(const std::string &key)
RemoveValue - Deletes value keyed with given name from this blackboard.
Definition: Blackboard.cpp:59
static BlackboardEntry TheirsStrategy(const std::string &, const BlackboardEntry &ours, const BlackboardEntry &theirs)
TheirsStrategy.
Definition: Blackboard.cpp:33
static BlackboardEntry OursStrategy(const std::string &, const BlackboardEntry &ours, const BlackboardEntry &theirs)
OursStrategy.
Definition: Blackboard.cpp:28
void SetValue(const std::string &key, T &&value)
SetValue - Inserts value keyed with name into this blackboard. If key already exists new value is ass...
Definition: Blackboard.hh:100
const T & GetOrAddValue(const std::string &key)
GetOrAddValue - Returns value keyed with name. If blackboard does not contain key,...
Definition: Blackboard.hh:140
const T & GetValue(const std::string &key) const
GetValue - Returns value keyed with name. This method assumes that this blackboard contains given key...
Definition: Blackboard.hh:122
The structure for holding elements in a Blackboard.
Definition: BlackboardEntry.hh:313