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
41 /* *************************************************************************************
42 * Variable
43 */
44 private:
45 void* vNull;
46 ufm::util::PArray vPArray;
47 volatile uint16 vHead;
48 volatile uint16 vTail;
49 volatile uint16 vCount;
50 volatile bool vSyncOffer;
51 volatile bool vSyncPoll;
52
53 /* *************************************************************************************
54 * Abstract Method
55 */
56
57 /* *************************************************************************************
58 * Construct Method
59 */
60 public:
67 ArrayQueue(ufm::util::PArray pArray) noexcept;
68
75 inline ArrayQueue(int queueSize, int elementSize)
76 : ArrayQueue(ufm::util::PArray(queueSize, elementSize)) {
77 return;
78 }
79
86 inline ArrayQueue(ufm::lang::Memory memory, int elementSize) noexcept
87 : ArrayQueue(ufm::util::PArray(memory, elementSize)) {
88 return;
89 }
90
99
107 ArrayQueue(ArrayQueue&& other) noexcept = default;
108
114 virtual ~ArrayQueue(void) override;
115
116 /* *************************************************************************************
117 * Operator Method
118 */
119 public:
126 template <typename E>
127 inline operator const Queue<E>&(void) const {
128 const Queue<>* src = this;
129 return *reinterpret_cast<const Queue<E>*>(src);
130 }
131
138 template <typename E>
139 inline operator Queue<E>&(void) {
140 Queue<>* src = this;
141 return *reinterpret_cast<Queue<E>*>(src);
142 }
143
144 /* *************************************************************************************
145 * Override Method - ufm::lang::Queue<void*>
146 */
147 public:
148 virtual bool offer(void* const& e) override;
149
150 virtual void*& poll(void) override;
151
152 virtual void*& peek(void) override;
153
154 /* *************************************************************************************
155 * Override Method - ufm::util::Container
156 */
157 public:
162 virtual void clear(void) override;
163
170 virtual bool isEmpty(void) const override;
171
179 virtual int size(void) const override;
180
181 /* *************************************************************************************
182 * Override Method - ufm::lang::Iteraable<void*>
183 */
184 public:
193 virtual void forEach(ufm::func::Consumer<void*&>& accetp) override;
194
201 virtual void** elementAt(int index) const override;
202
211 virtual int nextIndex(int index) const override;
212
220 virtual ufm::util::Iterator<void*> begin(void) override;
221
230 virtual ufm::util::Iterator<void*> end(void) override;
231
232 /* *************************************************************************************
233 * Override Method - ufm::util::ArrayQueue<void*>
234 */
235 public:
242 virtual bool isFull(void) const override;
243
244 /* *************************************************************************************
245 * Public Method
246 */
247
248 /* *************************************************************************************
249 * Protected Method
250 */
251
252 /* *************************************************************************************
253 * Private Method
254 */
255
256 /* *************************************************************************************
257 * Static Variable
258 */
259
260 /* *************************************************************************************
261 * Static Method
262 */
263};
264
265/* ***************************************************************************************
266 * End of file
267 */
268
269#endif /* MFRAME_469CD94D_3818_43D8_8CD0_54E853D56BE0 */
存儲資料的類別,提供動態記憶體管理功能。
Definition Memory.h:44
物件基底類別
Definition Object.h:63
指標陣列佇列類別
Definition ArrayQueue.h:40
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:75
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:86
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
返回當前索引的下一個有效索引。
[Class] 迭代器介面
Definition Iterator.h:42
指標陣列類別
Definition PArray.h:39
Definition Iterable.h:28
[Interface] 消費者函數式介面模板
Definition Consumer.h:43
[Interface] 佇列介面
Definition Queue.h:44