move and copy constructors

This commit is contained in:
Jorijn van der Graaf 2025-11-25 01:53:40 +01:00
commit dd3b2a4b9a

View file

@ -33,6 +33,8 @@ namespace Crafter {
public: public:
int priority; int priority;
EventListener(); EventListener();
EventListener(EventListener&) = delete;
EventListener& operator=(EventListener&) = delete;
void SetEvent(Event<T>* eventToListenTo, std::function<void(T)> function, int priority = 0); void SetEvent(Event<T>* eventToListenTo, std::function<void(T)> function, int priority = 0);
EventListener(Event<T>* eventToListenTo, std::function<void(T)> function, int priority = 0); EventListener(Event<T>* eventToListenTo, std::function<void(T)> function, int priority = 0);
~EventListener(); ~EventListener();
@ -45,6 +47,8 @@ namespace Crafter {
public: public:
int priority; int priority;
EventListener(); EventListener();
EventListener(EventListener&) = delete;
EventListener& operator=(EventListener&) = delete;
void SetEvent(Event<void>* eventToListenTo, std::function<void()> function, int priority = 0); void SetEvent(Event<void>* eventToListenTo, std::function<void()> function, int priority = 0);
EventListener(Event<void>* eventToListenTo, std::function<void()> function, int priority = 0); EventListener(Event<void>* eventToListenTo, std::function<void()> function, int priority = 0);
~EventListener(); ~EventListener();
@ -56,10 +60,18 @@ namespace Crafter {
class Event { class Event {
public: public:
std::map<int, std::vector<EventListener<T>*>> listeners; std::map<int, std::vector<EventListener<T>*>> 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() { ~Event() {
for (const auto& listenerSlice : listeners) { for (const auto& listenerSlice : listeners) {
const std::vector<EventListener<T>*> slice = listenerSlice.second; for (const auto& listener : listenerSlice.second) {
for (const auto& listener : slice) {
listener->eventToListenTo = nullptr; listener->eventToListenTo = nullptr;
} }
} }
@ -80,8 +92,7 @@ namespace Crafter {
void Invoke(T data) { void Invoke(T data) {
for (const auto& listenerSlice : listeners) { for (const auto& listenerSlice : listeners) {
const std::vector<EventListener<T>*> slice = listenerSlice.second; for (const auto& listener : listenerSlice.second) {
for (const auto& listener : slice) {
listener->function(data); listener->function(data);
} }
} }
@ -117,6 +128,15 @@ namespace Crafter {
class Event<void> { class Event<void> {
public: public:
std::map<int, std::vector<EventListener<void>*>> listeners; std::map<int, std::vector<EventListener<void>*>> 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() { ~Event() {
for (const auto& listenerSlice : listeners) { for (const auto& listenerSlice : listeners) {
const std::vector<EventListener<void>*> slice = listenerSlice.second; const std::vector<EventListener<void>*> slice = listenerSlice.second;