30 T&
ref() const&& = delete;
41 virtual void OnValueChanged(
const std::string& key,
const std::any& value) = 0;
58 const T&
Get(
const std::string& key)
62 return std::any_cast<T&>(blackboard.at(key));
64 catch (
const std::out_of_range& e)
66 throw std::out_of_range(
"invalid blackboard key: " + key);
78 const T&
Get(
const std::string& key,
const T& default_value)
80 auto it = blackboard.find(key);
81 if (it == blackboard.end())
83 it = blackboard.insert(std::pair<std::string, std::any>(key, default_value)).first;
84 NotifyKeyChanged(key, it->second);
86 return std::any_cast<T&>(it->second);
106 return NotifyOnEndUseRef(std::any_cast<T&>(blackboard.at(key)), [
this, key]() { NotifyKeyChanged(key, blackboard.at(key)); });
108 catch (
const std::out_of_range& e)
110 throw std::out_of_range(
"invalid blackboard key: " + key);
131 auto it = blackboard.find(key);
132 if (it == blackboard.end())
134 it = blackboard.insert(std::pair<std::string, std::any>(key, default_value)).first;
136 return NotifyOnEndUseRef(std::any_cast<T&>(it->second), [
this, key]() { NotifyKeyChanged(key, blackboard.at(key)); });
144 void Set(
const std::string& key,
const T& value)
146 blackboard[key] = value;
147 NotifyKeyChanged(key, blackboard[key]);
153 void Copy(
const std::string& src,
const std::string& dst);
157 void Erase(
const std::string& key);
161 void Reset(
const std::map<std::string, std::any>& values = {});
163 void Subscribe(BlackboardObserver* observer);
165 void Unsubscribe(BlackboardObserver* observer);
168 void NotifyCleared()
const;
169 void NotifyKeyRemoved(
const std::string& key)
const;
170 void NotifyKeyChanged(
const std::string& key,
const std::any& value)
const;
virtual void OnValueChanged(const std::string &key, const std::any &value)=0
virtual void OnValueRemoved(const std::string &key)=0
A map wrapper to store arbitrary data.
const T & Get(const std::string &key, const T &default_value)
Get the map value at key, casting it to T.
void Set(const std::string &key, const T &value)
Set map entry at key to value.
NotifyOnEndUseRef< T > GetRef(const std::string &key)
Get a ref to the map value at key, casting it to T&.
std::map< std::string, std::any > blackboard
const T & Get(const std::string &key)
Get the map value at key, casting it to T.
NotifyOnEndUseRef< T > GetRef(const std::string &key, const T &default_value)
Get a ref to the map value at key, casting it to T&.
std::vector< BlackboardObserver * > observers
Wrapper around a reference that will run a callback on destruct.
std::function< void()> on_destruct_callback
T & ref() const &
Reference getter.
NotifyOnEndUseRef(T &r, const std::function< void()> &on_destruct_callback_)
T & ref() const &&=delete