Cytopia  0.3
A city building simulation game
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
MessageQueue.inl.hxx
Go to the documentation of this file.
1 
2 template <typename Event> void MessageQueue<Event>::push(Event &&event)
3 {
4  /* Push the event */
5  {
6  Lock<Mutex> lock(*m_Semaphore);
7  m_Queue.push_back(event);
8  }
9  /* Notify */
10  m_OnEvent->notify_all();
11 }
12 
13 template <typename Event> bool MessageQueue<Event>::peek(void) noexcept
14 {
15  Lock<Mutex> lock(*m_Semaphore);
16  return m_OnEvent->wait_for(lock, std::chrono::seconds::zero(), std::bind(&MessageQueue::wakeCondition, this));
17 }
18 
20 {
21  Lock<Mutex> lock(*m_Semaphore);
22  m_OnEvent->wait(lock, std::bind(&MessageQueue::wakeCondition, this));
23  Enumerable enumerable;
24  std::swap(enumerable, m_Queue);
25  return enumerable;
26 }
27 
28 template <typename Event> bool MessageQueue<Event>::wakeCondition(void) const noexcept { return not m_Queue.empty(); }
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
MessageQueue::getEnumerable
Enumerable getEnumerable(void)
Definition: MessageQueue.inl.hxx:19
MessageQueue::Enumerable
Deque< Event > Enumerable
Definition: MessageQueue.hxx:26
MessageQueue::peek
bool peek(void) noexcept
Definition: MessageQueue.inl.hxx:13
Lock
std::unique_lock< Semaphore > Lock
Definition: MessageQueue.hxx:16