From 880a7b1fb233a67303ad5a4155dc459f79734762 Mon Sep 17 00:00:00 2001 From: WBoerenkamps Date: Mon, 11 Nov 2024 10:50:40 +0100 Subject: big cleanup events + events are now structs --- src/crepe/api/EventManager.cpp | 69 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 src/crepe/api/EventManager.cpp (limited to 'src/crepe/api/EventManager.cpp') diff --git a/src/crepe/api/EventManager.cpp b/src/crepe/api/EventManager.cpp new file mode 100644 index 0000000..07ef1f7 --- /dev/null +++ b/src/crepe/api/EventManager.cpp @@ -0,0 +1,69 @@ +#include "EventManager.h" + +void EventManager::unsubscribe(std::type_index eventType, const std::string & handlerName, + int eventId) { + // if (eventId) { + // std::unordered_map< + // std::type_index, std::unordered_map< + // int, std::vector>>>::iterator subscriber_list = subscribers_by_event_id.find(eventType); + // if (subscriber_list != subscribers_by_event_id.end()) { + // std::unordered_map< + // int, std::vector>> & + // handlers_map + // = subscriber_list->second; + // std::unordered_map< + // int, + // std::vector>>::iterator + // handlers + // = handlers_map.find(eventId); + // if (handlers != handlers_map.end()) { + // std::vector> & callbacks + // = handlers->second; + // for (std::vector< + // std::unique_ptr>::iterator it + // = callbacks.begin(); + // it != callbacks.end(); ++it) { + // if (it->get()->getType() == handlerName) { + // it = callbacks.erase(it); + // return; + // } + // } + // } + // } + // } else { + // std::unordered_map< + // std::type_index, std::vector>>::iterator + // handlers_it + // = subscribers.find(eventType); + // if (handlers_it != subscribers.end()) { + // std::vector> & handlers + // = handlers_it->second; + // for (std::vector>::iterator it + // = handlers.begin(); + // it != handlers.end(); ++it) { + // if (it->get()->getType() == handlerName) { + // it = handlers.erase(it); + // return; + // } + // } + // } + // } +} + +void EventManager::queue_event(std::unique_ptr && event_, int eventId) { + events_queue.emplace_back(std::move(event_), eventId); +} + +void EventManager::dispatch_events() { + // for (std::vector, int>>::iterator eventIt + // = eventsQueue.begin(); + // eventIt != eventsQueue.end();) { + // bool handled = false; + // if (!handled) { + // triggerEvent(*eventIt->first.get(), eventIt->second); + // eventIt = eventsQueue.erase(eventIt); + // } else { + // ++eventIt; + // } + // } +} -- cgit v1.2.3