![]() |
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.