ShishGL  1.0
A simple modular cross-platform graphics library
SubscriptionManager.hpp
Go to the documentation of this file.
1 /*============================================================================*/
2 #ifndef SHISHGL_SUBSCRIPTION_MANAGER_HPP
3 #define SHISHGL_SUBSCRIPTION_MANAGER_HPP
4 /*============================================================================*/
5 #include <cstdio>
6 #include <string_view>
7 #include <unordered_map>
8 #include <unordered_set>
9 
10 #include "Listener.hpp"
11 #include "Event.hpp"
12 /*============================================================================*/
13 namespace Sh {
14 
15 
17  public:
18 
19  SubscriptionManager() = delete;
20 
21  static void subscribe(Listener* receiver, Listener* sender,
22  EventMask mask);
23 
24  static void unsubscribe(Listener* receiver, Listener* sender,
25  EventMask mask);
26 
27  static void unsubscribeAll(Listener* sender);
28 
29  static void unsubscribeFromAll(Listener* receiver);
30 
31  static void dump(const std::string_view& filename);
32 
33  virtual ~SubscriptionManager() = default;
34 
35  private:
36 
37  using SubscriptionPool =
38  std::unordered_map<Listener*, std::unordered_map<Listener*, EventMask>>;
39 
40  friend class EventSystem;
41 
42  static SubscriptionPool& Subscriptions();
43 
44  friend class WindowManager;
45  };
46 
47 }
48 /*============================================================================*/
49 #endif //SHISHGL_SUBSCRIPTION_MANAGER_HPP
50 /*============================================================================*/
Sh::SubscriptionManager::~SubscriptionManager
virtual ~SubscriptionManager()=default
Sh::SubscriptionManager::dump
static void dump(const std::string_view &filename)
Definition: SubscriptionManager.cpp:49
Sh::WindowManager
Definition: WindowManager.hpp:13
Sh::SubscriptionManager
Definition: SubscriptionManager.hpp:16
Sh::SubscriptionManager::unsubscribeFromAll
static void unsubscribeFromAll(Listener *receiver)
Definition: SubscriptionManager.cpp:41
Sh::SubscriptionManager::unsubscribe
static void unsubscribe(Listener *receiver, Listener *sender, EventMask mask)
Definition: SubscriptionManager.cpp:28
Event.hpp
Sh::EventSystem
Definition: EventSystem.hpp:9
Sh
Definition: CoreApplication.hpp:10
Sh::SubscriptionManager::SubscriptionManager
SubscriptionManager()=delete
Listener.hpp
Sh::Listener
Definition: Listener.hpp:7
Sh::SubscriptionManager::unsubscribeAll
static void unsubscribeAll(Listener *sender)
Definition: SubscriptionManager.cpp:35
Sh::SubscriptionManager::subscribe
static void subscribe(Listener *receiver, Listener *sender, EventMask mask)
Definition: SubscriptionManager.cpp:18
Sh::EventMask
uint64_t EventMask
Definition: Event.hpp:11