/* * Author: Patrick-Christopher Mattulat * Company: Lynar Studios * E-Mail: webmaster@lynarstudios.com * Created: 2020-11-27 * Changed: 2023-05-17 * * */ #ifndef LS_STD_EVENT_MANAGER_HPP #define LS_STD_EVENT_MANAGER_HPP #include "EventHandler.hpp" #include #include #include #include #include #include namespace ls::std::event { class LS_STD_DYNAMIC_GOAL EventManager : public ls::std::core::Class, public ls::std::core::interface_type::IEventSubscriber { public: explicit EventManager(); ~EventManager() noexcept override; // implementation void subscribe(const ls::std::core::type::event_id &_id, const ::std::shared_ptr &_listener) override; void unsubscribe(const ls::std::core::type::event_id &_id, const ::std::shared_ptr &_listener) override; // additional functionality bool addEventHandler(const ::std::shared_ptr &_eventHandler); // nodiscard is optional here void fire(const ls::std::event::Event &_event); [[nodiscard]] bool hasEventHandler(const ls::std::core::type::event_id &_id); bool removeEventHandler(const ::std::shared_ptr &_eventHandler); // nodiscard is optional here private: ::std::map, ::std::less<>> eventHandlers{}; [[nodiscard]] bool _hasEventHandler(const ls::std::core::type::event_id &_id); [[nodiscard]] bool _removeEventHandler(const ::std::shared_ptr &_eventHandler); }; } #endif