ezEngine  Milestone 7
MessageQueue_inl.h
1 
2 template <typename MetaDataType>
4  m_Queue(pAllocator)
5 {
6 }
7 
8 template <typename MetaDataType>
10  m_Queue(pAllocator)
11 {
12  m_Queue = rhs.m_Queue;
13 }
14 
15 template <typename MetaDataType>
17 {
18  Clear();
19 }
20 
21 template <typename MetaDataType>
23 {
24  m_Queue = rhs.m_Queue;
25 }
26 
27 template <typename MetaDataType>
29 {
30  return m_Queue[uiIndex];
31 }
32 
33 template <typename MetaDataType>
34 EZ_FORCE_INLINE const typename ezMessageQueueBase<MetaDataType>::Entry& ezMessageQueueBase<MetaDataType>::operator[](ezUInt32 uiIndex) const
35 {
36  return m_Queue[uiIndex];
37 }
38 
39 template <typename MetaDataType>
40 EZ_FORCE_INLINE ezUInt32 ezMessageQueueBase<MetaDataType>::GetCount() const
41 {
42  return m_Queue.GetCount();
43 }
44 
45 template <typename MetaDataType>
46 EZ_FORCE_INLINE bool ezMessageQueueBase<MetaDataType>::IsEmpty() const
47 {
48  return m_Queue.IsEmpty();
49 }
50 
51 template <typename MetaDataType>
53 {
54  m_Queue.Clear();
55 }
56 
57 template <typename MetaDataType>
58 EZ_FORCE_INLINE void ezMessageQueueBase<MetaDataType>::Reserve(ezUInt32 uiCount)
59 {
60  m_Queue.Reserve(uiCount);
61 }
62 
63 template <typename MetaDataType>
65 {
66  m_Queue.Compact();
67 }
68 
69 template <typename MetaDataType>
70 void ezMessageQueueBase<MetaDataType>::Enqueue(ezMessage* pMessage, const MetaDataType& metaData)
71 {
72  Entry entry;
73  entry.m_pMessage = pMessage;
74  entry.m_MetaData = metaData;
75 
76  {
77  EZ_LOCK(m_Mutex);
78 
79  m_Queue.PushBack(entry);
80  }
81 }
82 
83 template <typename MetaDataType>
84 bool ezMessageQueueBase<MetaDataType>::TryDequeue(ezMessage*& out_pMessage, MetaDataType& out_metaData)
85 {
86  EZ_LOCK(m_Mutex);
87 
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 
101 template <typename MetaDataType>
102 bool ezMessageQueueBase<MetaDataType>::TryPeek(ezMessage*& out_pMessage, MetaDataType& out_metaData)
103 {
104  EZ_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 
118 template <typename MetaDataType>
120 {
121  return m_Queue.PeekFront();
122 }
123 
124 template <typename MetaDataType>
126 {
127  m_Queue.PopFront();
128 }
129 
130 template <typename MetaDataType>
131 template <typename Comparer>
132 EZ_FORCE_INLINE void ezMessageQueueBase<MetaDataType>::Sort(const Comparer& comparer)
133 {
134  m_Queue.Sort(comparer);
135 }
136 
137 template <typename MetaDataType>
139 {
140  m_Mutex.Acquire();
141 }
142 
143 template <typename MetaDataType>
145 {
146  m_Mutex.Release();
147 }
148 
149 
150 template <typename MD, typename A>
152  ezMessageQueueBase<MD>(A::GetAllocator())
153 {
154 }
155 
156 template <typename MD, typename A>
158  ezMessageQueueBase<MD>(pQueueAllocator)
159 {
160 }
161 
162 template <typename MD, typename A>
164  ezMessageQueueBase<MD>(rhs, A::GetAllocator())
165 {
166 }
167 
168 template <typename MD, typename A>
170  ezMessageQueueBase<MD>(rhs, A::GetAllocator())
171 {
172 }
173 
174 template <typename MD, typename A>
176 {
178 }
179 
180 template <typename MD, typename A>
182 {
184 }
185