Cytopia  0.3
A city building simulation game
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
MessageQueue.hxx
Go to the documentation of this file.
1 #ifndef MESSAGE_QUEUE_HXX_
2 #define MESSAGE_QUEUE_HXX_
3 
4 #include <condition_variable>
5 #include <mutex>
6 #include <deque>
7 #include <vector>
8 #include <functional>
9 #include <ciso646>
10 
11 using Monitor = std::condition_variable;
12 using Mutex = std::mutex;
13 using MonitorUPtr = std::unique_ptr<Monitor>;
14 using MutexUPtr = std::unique_ptr<Mutex>;
15 template <typename Type> using Deque = std::deque<Type>;
16 template <typename Semaphore> using Lock = std::unique_lock<Semaphore>;
17 
22 template <typename Event> class MessageQueue
23 {
24 
25 public:
27 
32  void push(Event &&event);
33 
38  bool peek(void) noexcept;
39 
47 
48  /* These operators are deleted to prevent race hazards */
49  MessageQueue(const MessageQueue &) = delete;
50  MessageQueue &operator=(const MessageQueue &) = delete;
51 
52  MessageQueue() = default;
53  MessageQueue(MessageQueue &&) = default;
54  MessageQueue &operator=(MessageQueue &&) = default;
55 
56 private:
61  bool wakeCondition(void) const noexcept;
62 
63  MonitorUPtr m_OnEvent = std::make_unique<Monitor>();
64  MutexUPtr m_Semaphore = std::make_unique<Mutex>();
66 };
67 
68 #include "MessageQueue.inl.hxx"
69 
70 #endif
MessageQueue.inl.hxx
MessageQueue::wakeCondition
bool wakeCondition(void) const noexcept
Definition: MessageQueue.inl.hxx:28
MessageQueue::push
void push(Event &&event)
Push an event on the Queue.
Definition: MessageQueue.inl.hxx:2
Mutex
std::mutex Mutex
Definition: MessageQueue.hxx:12
MessageQueue::MessageQueue
MessageQueue()=default
Deque
std::deque< Type > Deque
Definition: MessageQueue.hxx:15
MonitorUPtr
std::unique_ptr< Monitor > MonitorUPtr
Definition: MessageQueue.hxx:13
MessageQueue::m_Semaphore
MutexUPtr m_Semaphore
Definition: MessageQueue.hxx:64
Monitor
std::condition_variable Monitor
Definition: MessageQueue.hxx:11
MessageQueue::getEnumerable
Enumerable getEnumerable(void)
Definition: MessageQueue.inl.hxx:19
MessageQueue::m_OnEvent
MonitorUPtr m_OnEvent
Definition: MessageQueue.hxx:63
MessageQueue::m_Queue
Deque< Event > m_Queue
Definition: MessageQueue.hxx:65
MessageQueue
Definition: MessageQueue.hxx:22
MessageQueue::Enumerable
Deque< Event > Enumerable
Definition: MessageQueue.hxx:26
MutexUPtr
std::unique_ptr< Mutex > MutexUPtr
Definition: MessageQueue.hxx:14
MessageQueue::peek
bool peek(void) noexcept
Definition: MessageQueue.inl.hxx:13
MessageQueue::operator=
MessageQueue & operator=(const MessageQueue &)=delete
Lock
std::unique_lock< Semaphore > Lock
Definition: MessageQueue.hxx:16