![]() |
Plasma Engine
2.0
|
Implementation of a message queue on top of a deque. More...
#include <MessageQueue.h>
Classes | |
struct | Entry |
Public Member Functions | |
Entry & | operator[] (plUInt32 uiIndex) |
Returns the element at the given index. Not thread safe. | |
const Entry & | operator[] (plUInt32 uiIndex) const |
Returns the element at the given index. Not thread safe. | |
plUInt32 | GetCount () const |
Returns the number of active elements in the queue. | |
bool | IsEmpty () const |
Returns true, if the queue does not contain any elements. | |
void | Clear () |
Destructs all elements and sets the count to zero. Does not deallocate any data. | |
void | Reserve (plUInt32 uiCount) |
Expands the queue so it can at least store the given capacity. | |
void | Compact () |
Tries to compact the array to avoid wasting memory.The resulting capacity is at least 'GetCount' (no elements get removed). | |
void | Enqueue (plMessage *pMessage, const MetaDataType &metaData) |
Enqueues the given message and meta-data. This method is thread safe. | |
bool | TryDequeue (plMessage *&out_pMessage, MetaDataType &out_metaData) |
Dequeues the first element if the queue is not empty and returns true. Returns false if the queue is empty. This method is thread safe. | |
bool | TryPeek (plMessage *&out_pMessage, MetaDataType &out_metaData) |
Gives the first element if the queue is not empty and returns true. Returns false if the queue is empty. This method is thread safe. | |
Entry & | Peek () |
Returns the first element in the queue. Not thread safe. | |
void | Dequeue () |
Removes the first element from the queue. Not thread safe. | |
template<typename Comparer > | |
void | Sort (const Comparer &comparer) |
Sort with explicit comparer. Not thread safe. | |
void | Lock () |
Acquires an exclusive lock on the queue. Do not use this method directly but use plLock instead. | |
void | Unlock () |
Releases a lock that has been previously acquired. Do not use this method directly but use plLock instead. | |
template<typename Comparer > | |
PL_ALWAYS_INLINE void | Sort (const Comparer &comparer) |
Protected Member Functions | |
plMessageQueueBase (plAllocator *pAllocator) | |
No memory is allocated during construction. | |
plMessageQueueBase (const plMessageQueueBase &rhs, plAllocator *pAllocator) | |
No memory is allocated during construction. | |
~plMessageQueueBase () | |
Destructor. | |
void | operator= (const plMessageQueueBase &rhs) |
Assignment operator. | |
Implementation of a message queue on top of a deque.
Enqueue and TryDequeue/TryPeek methods are thread safe all the others are not. To ensure thread safety for all methods the queue can be locked using plLock like a mutex. Every entry consists of a pointer to a message and some meta data. Lifetime of the enqueued messages needs to be managed by the user.