diff --git a/interfaces/Crafter.Event.cppm b/interfaces/Crafter.Event.cppm index fb99b2c..b5aad46 100644 --- a/interfaces/Crafter.Event.cppm +++ b/interfaces/Crafter.Event.cppm @@ -33,6 +33,8 @@ namespace Crafter { public: int priority; EventListener(); + EventListener(EventListener&) = delete; + EventListener& operator=(EventListener&) = delete; void SetEvent(Event* eventToListenTo, std::function function, int priority = 0); EventListener(Event* eventToListenTo, std::function function, int priority = 0); ~EventListener(); @@ -45,6 +47,8 @@ namespace Crafter { public: int priority; EventListener(); + EventListener(EventListener&) = delete; + EventListener& operator=(EventListener&) = delete; void SetEvent(Event* eventToListenTo, std::function function, int priority = 0); EventListener(Event* eventToListenTo, std::function function, int priority = 0); ~EventListener(); @@ -56,10 +60,18 @@ namespace Crafter { class Event { public: std::map*>> listeners; + Event(Event&& other) : listeners(std::move(other.listeners)) { + for (const auto& listenerSlice : listeners) { + for (const auto& listener : listenerSlice.second) { + listener->eventToListenTo = this; + } + } + } + Event(Event&) = delete; + Event& operator=(Event&) = delete; ~Event() { for (const auto& listenerSlice : listeners) { - const std::vector*> slice = listenerSlice.second; - for (const auto& listener : slice) { + for (const auto& listener : listenerSlice.second) { listener->eventToListenTo = nullptr; } } @@ -80,8 +92,7 @@ namespace Crafter { void Invoke(T data) { for (const auto& listenerSlice : listeners) { - const std::vector*> slice = listenerSlice.second; - for (const auto& listener : slice) { + for (const auto& listener : listenerSlice.second) { listener->function(data); } } @@ -117,6 +128,15 @@ namespace Crafter { class Event { public: std::map*>> listeners; + Event(Event&& other) : listeners(std::move(other.listeners)) { + for (const auto& listenerSlice : listeners) { + for (const auto& listener : listenerSlice.second) { + listener->eventToListenTo = this; + } + } + } + Event(Event&) = delete; + Event& operator=(Event&) = delete; ~Event() { for (const auto& listenerSlice : listeners) { const std::vector*> slice = listenerSlice.second;