@@ -97,21 +97,25 @@ namespace ereignis
9797 }
9898
9999 template <auto Id, typename R, typename ... Ts>
100- std::size_t event<Id, R(Ts...)>::add(listener l )
100+ std::size_t event<Id, R(Ts...)>::add(listener value )
101101 {
102- auto lock = std::lock_guard{m_mutex};
103- auto id = m_counter++;
104-
105- m_listeners.emplace (id, std::make_shared<listener>(std::move (l)));
102+ const auto id = m_counter++;
103+ update (id, std::move (value));
106104
107105 return id;
108106 }
109107
110108 template <auto Id, typename R, typename ... Ts>
111- void event<Id, R(Ts...)>::once(listener::callback cb )
109+ void event<Id, R(Ts...)>::update(std:: size_t id, listener value )
112110 {
113111 auto lock = std::lock_guard{m_mutex};
114- auto id = m_counter++;
112+ m_listeners.insert_or_assign (id, std::make_shared<listener>(std::move (value)));
113+ }
114+
115+ template <auto Id, typename R, typename ... Ts>
116+ void event<Id, R(Ts...)>::once(listener::callback cb)
117+ {
118+ const auto id = m_counter++;
115119
116120 auto wrapper = [this , state = std::make_tuple (id, std::move (cb))]<typename ... Us>(Us &&...args ) mutable
117121 {
@@ -121,7 +125,7 @@ namespace ereignis
121125 return std::invoke (cb, std::forward<Us>(args)...);
122126 };
123127
124- m_listeners. emplace (id, std::make_shared<listener>( std:: move (wrapper) ));
128+ update (id, std::move (wrapper));
125129 }
126130
127131 template <auto Id, typename R, typename ... Ts>
0 commit comments