mFrame
載入中...
搜尋中...
無符合項目
Stacker.h
1
8#ifndef MFRAME_C045F3C4_B727_4170_9124_44EFD0DADB46
9#define MFRAME_C045F3C4_B727_4170_9124_44EFD0DADB46
10
11/* ***************************************************************************************
12 * Include
13 */
14
15//----------------------------------------------------------------------------------------
16#include "./../lang/Memory.h"
17#include "./../sys/Allocator.h"
18#include "./../util/Collection.h"
19#include "./../util/Iterator.h"
20
21//----------------------------------------------------------------------------------------
22
23/* ***************************************************************************************
24 * Namespace
25 */
26namespace ufm::sys {
27 class Stacker;
28} // namespace ufm::sys
29
30/* ***************************************************************************************
31 * Class/Interface/Struct
32 */
33
44 public ufm::util::Collection<void*>,
45 public ufm::sys::Allocator {
46 /* *************************************************************************************
47 * Variable
48 */
49 protected:
55
59 uint32 vMask;
60
61 /* *************************************************************************************
62 * Abstract Method
63 */
64
65 /* *************************************************************************************
66 * Construct Method
67 */
68 public:
75 template <size_t N>
76 inline Stacker(uint64 (&buffer)[N])
77 : Stacker(ufm::lang::Memory(buffer, (N * sizeof(uint64)))) {
78 return;
79 }
80
88 inline Stacker(void* buffer, int size) : Stacker(ufm::lang::Memory(buffer, size)) {
89 return;
90 }
91
98 Stacker(ufm::lang::Memory memory) noexcept;
99
105 virtual ~Stacker(void) override;
106
107 /* *************************************************************************************
108 * Operator Method
109 */
110
111 /* *************************************************************************************
112 * Override Method - ufm::lang::Iterable<const void*>
113 */
114 public:
123 virtual void forEach(ufm::func::Consumer<void*&>& action) override;
124
131 virtual void** elementAt(int index) const override;
132
141 virtual int nextIndex(int index) const override;
142
148 virtual ufm::util::Iterator<void*> begin(void) override;
149
155 virtual ufm::util::Iterator<void*> end(void) override;
156
157 /* *************************************************************************************
158 * Override Method - ufm::util::Collection<ufm::lang::Memory>
159 */
160 public:
161 virtual void clear(void) override;
162
163 virtual bool isEmpty(void) const override;
164
165 virtual int size(void) const override;
166
167 /* *************************************************************************************
168 * Override Method - ufm::sys::Allocator
169 */
170 public:
177 virtual void* alloc(int size) override;
178
187 virtual bool free(void* ptr, int size = 0) override;
188
194 virtual int getFree(void) override;
195
201 virtual int getTotal(void) override;
202
203 /* *************************************************************************************
204 * Public Method
205 */
206 public:
215
216 /* *************************************************************************************
217 * Protected Method
218 */
219
220 /* *************************************************************************************
221 * Private Method
222 */
223
224 /* *************************************************************************************
225 * Static Variable
226 */
227
228 /* *************************************************************************************
229 * Static Method
230 */
231 public:
239 template <size_t N>
240 static inline Stacker* construct(uint64 (&buffer)[N]) {
241 return construct(static_cast<void*>(buffer), static_cast<int>(sizeof(uint64)) * N);
242 }
243
252 static Stacker* construct(void* pointer, int size);
253};
254
255/* ***************************************************************************************
256 * End of file
257 */
258
259#endif /* MFRAME_C045F3C4_B727_4170_9124_44EFD0DADB46 */
動態記憶體管理類別
Definition Memory.h:38
物件基底類別
Definition Object.h:63
堆疊式記憶體分配器
Definition Stacker.h:45
virtual ufm::util::Iterator< void * > end(void) override
返回一個迭代器,用於遍歷集合的結尾
Stacker(uint64(&buffer)[N])
建構一個新的 Stacker 物件
Definition Stacker.h:76
uint32 vMask
對齊遮罩,用於記憶體對齊
Definition Stacker.h:59
ufm::lang::Memory vMemory
用於堆疊分配的記憶體空間
Definition Stacker.h:50
virtual bool isEmpty(void) const override
檢查此集合是否不包含任何元素
virtual void forEach(ufm::func::Consumer< void *& > &action) override
遍歷集合中所有元素,對每個元素執行指定操作。 若所有元素處理完畢或操作中發生異常則停止。
virtual ~Stacker(void) override
解構 Stacker 物件
virtual int getFree(void) override
取得剩餘的可用記憶體數量
Stacker(ufm::lang::Memory memory) noexcept
建構一個新的 Stacker 物件
static Stacker * construct(uint64(&buffer)[N])
在指定的記憶體區域上建構 Stacker 物件
Definition Stacker.h:240
virtual void * alloc(int size) override
分配指定大小的記憶體
virtual ufm::util::Iterator< void * > begin(void) override
返回一個迭代器,用於遍歷集合中的元素
Stacker(void *buffer, int size)
建構一個新的 Stacker 物件
Definition Stacker.h:88
virtual void clear(void) override
從此集合中刪除所有元素(可選操作)
virtual int getTotal(void) override
取得總記憶體大小
static Stacker * construct(void *pointer, int size)
在指定的記憶體區域上建構 Stacker 物件
virtual int size(void) const override
返回此集合中的元素數量
virtual bool free(void *ptr, int size=0) override
釋放先前分配的記憶體
uint8 * vStackPointer
堆疊指針,指向下一個可分配的記憶體位置
Definition Stacker.h:54
virtual int nextIndex(int index) const override
返回當前索引的下一個有效索引。
virtual void ** elementAt(int index) const override
獲取集合中指定索引處的元素。
virtual ufm::lang::Memory allocMemory(int size)
分配指定大小的記憶體並返回其 Memory 封裝
迭代器類別,提供遍歷集合元素的標準介面。
Definition Iterator.h:257
系統功能相關的命名空間
Definition Object.h:31
[Interface] 消費者函數式介面模板
Definition Consumer.h:43
[Interface] 記憶體分配器介面
Definition Allocator.h:38
集合介面,定義集合層次結構的根介面。
Definition Collection.h:171