Cytopia  0.3
A city building simulation game
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
MessageQueue< Event > Class Template Reference

#include <MessageQueue.hxx>

+ Collaboration diagram for MessageQueue< Event >:

Public Types

using Enumerable = Deque< Event >
 

Public Member Functions

void push (Event &&event)
 Push an event on the Queue. More...
 
bool peek (void) noexcept
 
Enumerable getEnumerable (void)
 
 MessageQueue (const MessageQueue &)=delete
 
MessageQueueoperator= (const MessageQueue &)=delete
 
 MessageQueue ()=default
 
 MessageQueue (MessageQueue &&)=default
 
MessageQueueoperator= (MessageQueue &&)=default
 

Private Member Functions

bool wakeCondition (void) const noexcept
 

Private Attributes

MonitorUPtr m_OnEvent = std::make_unique<Monitor>()
 
MutexUPtr m_Semaphore = std::make_unique<Mutex>()
 
Deque< Event > m_Queue
 

Detailed Description

template<typename Event>
class MessageQueue< Event >

Examples
tests/util/MessageQueue.cxx.

Definition at line 22 of file MessageQueue.hxx.

Member Typedef Documentation

◆ Enumerable

template<typename Event >
using MessageQueue< Event >::Enumerable = Deque<Event>

Definition at line 26 of file MessageQueue.hxx.

Constructor & Destructor Documentation

◆ MessageQueue() [1/3]

template<typename Event >
MessageQueue< Event >::MessageQueue ( const MessageQueue< Event > &  )
delete

◆ MessageQueue() [2/3]

template<typename Event >
MessageQueue< Event >::MessageQueue ( )
default

◆ MessageQueue() [3/3]

template<typename Event >
MessageQueue< Event >::MessageQueue ( MessageQueue< Event > &&  )
default

Member Function Documentation

◆ getEnumerable()

template<typename Event >
MessageQueue< Event >::Enumerable MessageQueue< Event >::getEnumerable ( void  )

Blocks the thread until an event is received

Returns
an Enumerable of Events on the Queue
Postcondition
the Queue is emptied
Enumerable contains at least one Event

Definition at line 19 of file MessageQueue.inl.hxx.

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 }
+ Here is the call graph for this function:

◆ operator=() [1/2]

template<typename Event >
MessageQueue& MessageQueue< Event >::operator= ( const MessageQueue< Event > &  )
delete

◆ operator=() [2/2]

template<typename Event >
MessageQueue& MessageQueue< Event >::operator= ( MessageQueue< Event > &&  )
default

◆ peek()

template<typename Event >
bool MessageQueue< Event >::peek ( void  )
noexcept
Returns
true if the queue contains a message

This method is non-blocking

Definition at line 13 of file MessageQueue.inl.hxx.

14 {
15  Lock<Mutex> lock(*m_Semaphore);
16  return m_OnEvent->wait_for(lock, std::chrono::seconds::zero(), std::bind(&MessageQueue::wakeCondition, this));
17 }
+ Here is the call graph for this function:

◆ push()

template<typename Event >
void MessageQueue< Event >::push ( Event &&  event)

Push an event on the Queue.

Postcondition
All waiting threads are notified
Examples
tests/util/MessageQueue.cxx.

Definition at line 2 of file MessageQueue.inl.hxx.

3 {
4  /* Push the event */
5  {
7  m_Queue.push_back(event);
8  }
9  /* Notify */
10  m_OnEvent->notify_all();
11 }

◆ wakeCondition()

template<typename Event >
bool MessageQueue< Event >::wakeCondition ( void  ) const
privatenoexcept
Precondition
This thread owns a m_Semaphore Lock
Returns
true if the queue contains an event

Definition at line 28 of file MessageQueue.inl.hxx.

28 { return not m_Queue.empty(); }
+ Here is the caller graph for this function:

Member Data Documentation

◆ m_OnEvent

template<typename Event >
MonitorUPtr MessageQueue< Event >::m_OnEvent = std::make_unique<Monitor>()
private

Definition at line 63 of file MessageQueue.hxx.

◆ m_Queue

template<typename Event >
Deque<Event> MessageQueue< Event >::m_Queue
private

Definition at line 65 of file MessageQueue.hxx.

◆ m_Semaphore

template<typename Event >
MutexUPtr MessageQueue< Event >::m_Semaphore = std::make_unique<Mutex>()
private

Definition at line 64 of file MessageQueue.hxx.


The documentation for this class was generated from the following files:
MessageQueue::wakeCondition
bool wakeCondition(void) const noexcept
Definition: MessageQueue.inl.hxx:28
MessageQueue::m_Semaphore
MutexUPtr m_Semaphore
Definition: MessageQueue.hxx:64
MessageQueue::m_OnEvent
MonitorUPtr m_OnEvent
Definition: MessageQueue.hxx:63
MessageQueue::m_Queue
Deque< Event > m_Queue
Definition: MessageQueue.hxx:65
MessageQueue::Enumerable
Deque< Event > Enumerable
Definition: MessageQueue.hxx:26
Lock
std::unique_lock< Semaphore > Lock
Definition: MessageQueue.hxx:16