9 #ifndef EMP_CONTROL_SIGNAL_MANAGER 10 #define EMP_CONTROL_SIGNAL_MANAGER 13 #include <unordered_map> 15 #include "../tools/string_utils.h" 23 std::unordered_map<std::string, SignalBase *> signal_map;
25 std::string prefix =
"emp_signal_";
28 inline std::string GenerateSignalName(
const std::string & pre=
"") {
37 for (
const auto & x : in.signal_map) {
38 signal_map[x.first] = x.second->Clone();
44 size_t GetSize()
const {
return signal_map.size(); }
47 emp_assert(signal_map.find(name) != signal_map.end());
48 return *(signal_map[name]);
51 auto it = signal_map.find(name);
57 template <
typename FUN_T>
58 auto &
Add(
const std::string & name) {
60 signal_map[name] = new_signal;
61 new_signal->signal_id = next_id++;
62 new_signal->managers.push_back(
this);
63 new_signal->prime_manager =
this;
67 template <
typename FUN_T>
69 signal_map[signal.name] = &signal;
70 signal.signal_id = next_id++;
71 signal.managers.push_back(
this);
77 signal_map[signal->
name] = signal;
84 signal_map.erase(signal->
name);
88 os << signal_map.size() <<
" signals found:\n";
89 for (
auto & x : signal_map) os <<
" " << x.first <<
std::endl;
uint32_t signal_id
What is the unique ID of this signal?
Definition: Signal.h:103
std::string to_string(ALL_TYPES &&...all_values)
Definition: string_utils.h:511
Base class for all signals.
Definition: Signal.h:97
~SignalManager()
Definition: SignalManager.h:41
SignalManager()
Definition: SignalManager.h:33
std::string name
What is the unique name of this signal?
Definition: Signal.h:102
size_t GetSize() const
Definition: SignalManager.h:44
void NotifyDestruct(SignalBase *signal) override
Definition: SignalManager.h:82
Generic version of Signals; needs specialization to a function type..
Definition: Signal.h:159
Definition: SignalManager.h:21
auto & Add(const std::string &name)
Definition: SignalManager.h:58
static const PrintStr endl("<br>")
Pre-define emp::endl to insert a "<br>" and thus acting like a newline.
void PrintNames(std::ostream &os=std::cout)
Definition: SignalManager.h:87
emp::vector< man_t * > managers
What manager is handling this signal?
Definition: Signal.h:106
SignalManager(const SignalManager &in)
Definition: SignalManager.h:35
void NotifyConstruct(SignalBase *signal) override
Definition: SignalManager.h:75
If we are in emscripten, make sure to include the header.
Definition: array.h:37
auto & Add(Signal< FUN_T > &signal)
Definition: SignalManager.h:68
#define emp_assert(...)
Definition: assert.h:199
SignalBase & operator[](const std::string &name)
Definition: SignalManager.h:46
const SignalBase & operator[](const std::string &name) const
Definition: SignalManager.h:50
uint32_t GetNextID() const
Definition: SignalManager.h:43