Guest User

Untitled

a guest
Jul 22nd, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.57 KB | None | 0 0
  1. #pragma once
  2.  
  3. #include <map>
  4. #include <functional>
  5.  
  6. template<typename EventType>
  7. class IEventDispatcher
  8. {
  9. public:
  10. using EventHandler = std::function<void()>;
  11.  
  12. virtual void addEventListener(EventType eventToAdd, EventHandler handler) = 0;
  13. virtual void removeEventListener(EventType eventToRemove) = 0;
  14. virtual void dispatch(EventType eventToDispatch) = 0;
  15. };
  16.  
  17. #pragma once
  18.  
  19. #include "IEventDispatcher.h"
  20.  
  21. template<typename EventType>
  22. class EventDispatcher : public IEventDispatcher<EventType>
  23. {
  24. public:
  25. using EventHandler = std::function<void()>;
  26.  
  27. EventDispatcher();
  28. ~EventDispatcher();
  29.  
  30. void addEventListener(EventType eventToAdd, EventHandler handler);
  31. void removeEventListener(EventType eventToRemove);
  32. void dispatch(EventType eventToDispatch);
  33.  
  34. private:
  35. std::multimap<EventType, EventHandler> eventListeners;
  36. };
  37.  
  38. template<typename EventType>
  39. EventDispatcher<EventType>::EventDispatcher()
  40. {}
  41.  
  42. template<typename EventType>
  43. EventDispatcher<EventType>::~EventDispatcher()
  44. {}
  45.  
  46. template<typename EventType>
  47. void EventDispatcher<EventType>::addEventListener(EventType eventToAdd, EventHandler handler)
  48. {
  49. eventListeners.emplace(eventToAdd, handler);
  50. }
  51.  
  52. template<typename EventType>
  53. void EventDispatcher<EventType>::removeEventListener(EventType eventToRemove)
  54. {
  55. eventListeners.erase(eventToRemove);
  56. }
  57.  
  58. template<typename EventType>
  59. void EventDispatcher<EventType>::dispatch(EventType eventToDispatch)
  60. {
  61. for (const auto &[event, handler] : eventListeners)
  62. {
  63. if (event == eventToDispatch)
  64. {
  65. handler();
  66. }
  67. }
  68. }
Add Comment
Please, Sign In to add comment