Plasma Engine  2.0
Loading...
Searching...
No Matches
MessageQueue_inl.h
1
2template <typename MetaDataType>
4 : m_Queue(pAllocator)
5{
6}
7
8template <typename MetaDataType>
10 : m_Queue(pAllocator)
11{
12 m_Queue = rhs.m_Queue;
13}
14
15template <typename MetaDataType>
20
21template <typename MetaDataType>
23{
24 m_Queue = rhs.m_Queue;
25}
26
27template <typename MetaDataType>
29{
30 return m_Queue[uiIndex];
32
33template <typename MetaDataType>
34PL_ALWAYS_INLINE const typename plMessageQueueBase<MetaDataType>::Entry& plMessageQueueBase<MetaDataType>::operator[](plUInt32 uiIndex) const
35{
36 return m_Queue[uiIndex];
38
39template <typename MetaDataType>
40PL_ALWAYS_INLINE plUInt32 plMessageQueueBase<MetaDataType>::GetCount() const
41{
42 return m_Queue.GetCount();
43}
45template <typename MetaDataType>
46PL_ALWAYS_INLINE bool plMessageQueueBase<MetaDataType>::IsEmpty() const
48 return m_Queue.IsEmpty();
49}
51template <typename MetaDataType>
54 m_Queue.Clear();
55}
57template <typename MetaDataType>
58PL_ALWAYS_INLINE void plMessageQueueBase<MetaDataType>::Reserve(plUInt32 uiCount)
60 m_Queue.Reserve(uiCount);
61}
63template <typename MetaDataType>
66 m_Queue.Compact();
67}
69template <typename MetaDataType>
70void plMessageQueueBase<MetaDataType>::Enqueue(plMessage* pMessage, const MetaDataType& metaData)
72 Entry entry;
73 entry.m_pMessage = pMessage;
74 entry.m_MetaData = metaData;
75
76 {
77 PL_LOCK(m_Mutex);
78
79 m_Queue.PushBack(entry);
80 }
81}
82
83template <typename MetaDataType>
84bool plMessageQueueBase<MetaDataType>::TryDequeue(plMessage*& out_pMessage, MetaDataType& out_metaData)
85{
86 PL_LOCK(m_Mutex);
88 if (!m_Queue.IsEmpty())
89 {
90 Entry& entry = m_Queue.PeekFront();
91 out_pMessage = entry.m_pMessage;
92 out_metaData = entry.m_MetaData;
93
94 m_Queue.PopFront();
95 return true;
96 }
97
98 return false;
99}
100
101template <typename MetaDataType>
102bool plMessageQueueBase<MetaDataType>::TryPeek(plMessage*& out_pMessage, MetaDataType& out_metaData)
103{
104 PL_LOCK(m_Mutex);
105
106 if (!m_Queue.IsEmpty())
107 {
108 Entry& entry = m_Queue.PeekFront();
109 out_pMessage = entry.m_pMessage;
110 out_metaData = entry.m_MetaData;
111
112 return true;
113 }
114
115 return false;
116}
117
118template <typename MetaDataType>
120{
121 return m_Queue.PeekFront();
122}
123
124template <typename MetaDataType>
126{
127 m_Queue.PopFront();
128}
129
130template <typename MetaDataType>
131template <typename Comparer>
132PL_ALWAYS_INLINE void plMessageQueueBase<MetaDataType>::Sort(const Comparer& comparer)
133{
134 m_Queue.Sort(comparer);
135}
136
137template <typename MetaDataType>
139{
140 m_Mutex.Lock();
141}
142
143template <typename MetaDataType>
145{
146 m_Mutex.Unlock();
147}
148
149
150template <typename MD, typename A>
152 : plMessageQueueBase<MD>(A::GetAllocator())
153{
154}
155
156template <typename MD, typename A>
158 : plMessageQueueBase<MD>(pQueueAllocator)
159{
160}
161
162template <typename MD, typename A>
164 : plMessageQueueBase<MD>(rhs, A::GetAllocator())
165{
166}
167
168template <typename MD, typename A>
170 : plMessageQueueBase<MD>(rhs, A::GetAllocator())
171{
172}
173
174template <typename MD, typename A>
176{
178}
179
180template <typename MD, typename A>
182{
184}
Base class for all memory allocators.
Definition Allocator.h:23
Base class for all message types. Each message type has it's own id which is used to dispatch message...
Definition Message.h:22
Implementation of a message queue on top of a deque.
Definition MessageQueue.h:18
void operator=(const plMessageQueueBase &rhs)
Assignment operator.
Definition MessageQueue_inl.h:22
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 ...
Definition MessageQueue_inl.h:84
void Compact()
Tries to compact the array to avoid wasting memory.The resulting capacity is at least 'GetCount' (no ...
Definition MessageQueue_inl.h:64
bool IsEmpty() const
Returns true, if the queue does not contain any elements.
Definition MessageQueue_inl.h:46
void Dequeue()
Removes the first element from the queue. Not thread safe.
Definition MessageQueue_inl.h:125
void Clear()
Destructs all elements and sets the count to zero. Does not deallocate any data.
Definition MessageQueue_inl.h:52
~plMessageQueueBase()
Destructor.
Definition MessageQueue_inl.h:16
void Enqueue(plMessage *pMessage, const MetaDataType &metaData)
Enqueues the given message and meta-data. This method is thread safe.
Definition MessageQueue_inl.h:70
void Lock()
Acquires an exclusive lock on the queue. Do not use this method directly but use plLock instead.
Definition MessageQueue_inl.h:138
plUInt32 GetCount() const
Returns the number of active elements in the queue.
Definition MessageQueue_inl.h:40
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 emp...
Definition MessageQueue_inl.h:102
Entry & operator[](plUInt32 uiIndex)
Returns the element at the given index. Not thread safe.
Definition MessageQueue_inl.h:28
void Reserve(plUInt32 uiCount)
Expands the queue so it can at least store the given capacity.
Definition MessageQueue_inl.h:58
void Unlock()
Releases a lock that has been previously acquired. Do not use this method directly but use plLock ins...
Definition MessageQueue_inl.h:144
plMessageQueueBase(plAllocator *pAllocator)
No memory is allocated during construction.
Definition MessageQueue_inl.h:3
Entry & Peek()
Returns the first element in the queue. Not thread safe.
Definition MessageQueue_inl.h:119
void Sort(const Comparer &comparer)
Sort with explicit comparer. Not thread safe.
Definition MessageQueue.h:97
Definition MessageQueue.h:21