mFrame
載入中...
搜尋中...
無符合項目
ArrayQueue.h
1
7#ifndef MFRAME_469CD94D_3818_43D8_8CD0_54E853D56BE0
8#define MFRAME_469CD94D_3818_43D8_8CD0_54E853D56BE0
9
10/* ***************************************************************************************
11 * Include
12 */
13
14//----------------------------------------------------------------------------------------
15
16//----------------------------------------------------------------------------------------
17#include "./../lang/Memory.h"
18#include "./../lang/Object.h"
19#include "./../util/PArray.h"
20#include "./../util/Queue.h"
21
22/* ***************************************************************************************
23 * Namespace
24 */
25namespace ufm::util {
26 class ArrayQueue;
27} // namespace ufm::util
28
29/* ***************************************************************************************
30 * Class/Interface/Struct/Enum
31 */
32
99 /* *************************************************************************************
100 * Variable
101 */
102 private:
104 void* vNull;
106 ufm::util::PArray vPArray;
108 volatile uint16 vHead;
110 volatile uint16 vTail;
112 volatile uint16 vCount;
114 volatile bool vSyncOffer;
116 volatile bool vSyncPoll;
117
118 /* *************************************************************************************
119 * Abstract Method
120 */
121
122 /* *************************************************************************************
123 * Construct Method
124 */
125 public:
133
140 inline ArrayQueue(int queueSize, int elementSize)
141 : ArrayQueue(ufm::util::PArray(queueSize, elementSize)) {
142 return;
143 }
144
151 inline ArrayQueue(ufm::lang::Memory memory, int elementSize) noexcept
152 : ArrayQueue(ufm::util::PArray(memory, elementSize)) {
153 return;
154 }
155
164
172 ArrayQueue(ArrayQueue&& other) noexcept = default;
173
179 virtual ~ArrayQueue(void) override;
180
181 /* *************************************************************************************
182 * Operator Method
183 */
184 public:
191 template <typename E>
192 inline operator const Queue<E>&(void) const {
193 const Queue<>* src = this;
194 return *reinterpret_cast<const Queue<E>*>(src);
195 }
196
203 template <typename E>
204 inline operator Queue<E>&(void) {
205 Queue<>* src = this;
206 return *reinterpret_cast<Queue<E>*>(src);
207 }
208
209 /* *************************************************************************************
210 * Override Method - ufm::lang::Queue<void*>
211 */
212 public:
213 virtual bool offer(void* const& e) override;
214
215 virtual void*& poll(void) override;
216
217 virtual void*& peek(void) override;
218
219 /* *************************************************************************************
220 * Override Method - ufm::util::Container
221 */
222 public:
227 virtual void clear(void) override;
228
235 virtual bool isEmpty(void) const override;
236
244 virtual int size(void) const override;
245
246 /* *************************************************************************************
247 * Override Method - ufm::lang::Iteraable<void*>
248 */
249 public:
258 virtual void forEach(ufm::func::Consumer<void*&>& accetp) override;
259
266 virtual void** elementAt(int index) const override;
267
276 virtual int nextIndex(int index) const override;
277
285 virtual ufm::util::Iterator<void*> begin(void) override;
286
295 virtual ufm::util::Iterator<void*> end(void) override;
296
297 /* *************************************************************************************
298 * Override Method - ufm::util::ArrayQueue<void*>
299 */
300 public:
307 virtual bool isFull(void) const override;
308
309 /* *************************************************************************************
310 * Public Method
311 */
312
313 /* *************************************************************************************
314 * Protected Method
315 */
316
317 /* *************************************************************************************
318 * Private Method
319 */
320
321 /* *************************************************************************************
322 * Static Variable
323 */
324
325 /* *************************************************************************************
326 * Static Method
327 */
328};
329
330/* ***************************************************************************************
331 * End of file
332 */
333
334#endif /* MFRAME_469CD94D_3818_43D8_8CD0_54E853D56BE0 */
動態記憶體管理類別
Definition Memory.h:38
物件基底類別
Definition Object.h:63
指標陣列佇列類別,實作 FIFO (先進先出) 佇列結構。
Definition ArrayQueue.h:98
virtual void ** elementAt(int index) const override
獲取集合中指定索引處的元素。
ArrayQueue(ufm::util::ArrayQueue &other)=delete
複製構造函數
virtual void *& poll(void) override
檢索並刪除此隊列的頭,如果此隊列為空,則返回null。
ArrayQueue(int queueSize, int elementSize)
從指定的記憶體和元素大小建構新的指標陣列佇列
Definition ArrayQueue.h:140
virtual ufm::util::Iterator< void * > end(void) override
取得 Scanner 結尾迭代器。
virtual bool isEmpty(void) const override
如果此集合不包含元素,則返回true。
virtual ufm::util::Iterator< void * > begin(void) override
取得目前插入位置。
virtual void clear(void) override
從此集合中刪除所有元素(可選操作)。此方法返回後,集合將為空。
ArrayQueue(ufm::lang::Memory memory, int elementSize) noexcept
從記憶體區域建構新的指標陣列佇列
Definition ArrayQueue.h:151
ArrayQueue(ufm::util::PArray pArray) noexcept
從記憶體區域建構新的指標陣列佇列
ArrayQueue(ArrayQueue &&other) noexcept=default
移動構造函數
virtual int size(void) const override
返回此集合中的元素數。
virtual bool isFull(void) const override
檢查佇列是否已滿
virtual ~ArrayQueue(void) override
解構指標陣列佇列物件
virtual bool offer(void *const &e) override
如果在不違反容量限制的情況下立即執行,則將指定的元素插入到此隊列中。 當使用容量限制隊列時,此方法通常優於 add(E) ,這可能無法僅通過拋出異常來插入元素。
virtual void *& peek(void) override
檢索但不刪除此隊列的頭部,如果此隊列為空,則返回 null 。
virtual void forEach(ufm::func::Consumer< void *& > &accetp) override
遍歷集合中所有元素,對每個元素執行指定操作。 若所有元素處理完畢或操作中發生異常則停止。
virtual int nextIndex(int index) const override
返回當前索引的下一個有效索引。
迭代器類別,提供遍歷集合元素的標準介面。
Definition Iterator.h:257
指標陣列類別,實作動態大小的指標容器。
Definition PArray.h:329
Definition Iterable.h:28
[Interface] 消費者函數式介面模板
Definition Consumer.h:43
佇列介面,定義先進先出(FIFO)的容器操作。
Definition Queue.h:94