OROCHI
 
Loading...
Searching...
No Matches
GxArrayClassBase.h
Go to the documentation of this file.
1//===========================================================================
9//===========================================================================
10#pragma once
11
12GX_CORE_NAMESPACE_BEGIN()
13
14//===========================================================================
16//===========================================================================
18{
19 //-----------------------------------------------------------
21 //-----------------------------------------------------------
23public:
24 // RTTI宣言
25 GX_RTTI_CLASS(GxArrayClassBase, GxClassBase)
26 // GxClassBase継承クラス用禁止宣言
29 static constexpr u32 ALLOC_COUNT_FIRST = 8;
30 using __type = GxClassBaseRoot*;
31
33 //-----------------------------------------------------------
35 //-----------------------------------------------------------
37
39 GxArrayClassBase(void);
41 GxArrayClassBase(GxAllocatorList::ALLOCATOR_TYPE allocatorType);
43 ~GxArrayClassBase(void) override;
44
46 //-----------------------------------------------------------
48 //-----------------------------------------------------------
50public:
52 GX_FORCE_INLINE void addTop(GxClassBaseRoot* pObject){ insert(0, pObject); }
54 void addBottom(GxClassBaseRoot* pObject);
56 void insert(u32 index, GxClassBaseRoot* pObject);
58 void erase(GxClassBaseRoot* pObject);
60 virtual void erase(u32 index);
62 void eraseAll(void);
64 void eraseAllFast(void);
66 void remove(GxClassBaseRoot* pObject);
68 void removeFirst(GxClassBaseRoot* pObject);
70 void remove(u32 index);
72 void removeNullObject(void);
74 GX_FORCE_INLINE void removeAll(void){ eraseAll(); }
76 GxClassBaseRoot* pop(void);
78 s32 findIndex(GxClassBaseRoot* pObject, u32 startIndex = 0) const;
79
80protected:
82 virtual GxClassBaseRoot** allocateMemory(u32 size) { return static_cast<GxClassBaseRoot**>(GX_ALLOCATE_MEMORY(getGxAllocatorList(_allocatorType), size)); }
85 virtual u32 expandAllocCount(void) { return _allocCount * 2; }
86private:
88 void addCount(void);
89
91 //-----------------------------------------------------------
93 //-----------------------------------------------------------
95public:
97 constexpr __type& operator[](u32 i) const { GX_ASSERT(i < _count, "count error."); return _ppObject[i]; }
99 constexpr __type& operator[](u32 i) { GX_ASSERT(i < _count, "count error."); return _ppObject[i]; }
101 constexpr GxArray::Iterator<__type> begin(void) const { return { &_ppObject[0] }; }
103 constexpr GxArray::Iterator<__type> end(void) const { return { &_ppObject[_count] }; }
105 constexpr GxClassBaseRoot* getObject(u32 index) const { return _ppObject[index]; }
107 virtual void setObject(u32 index, GxClassBaseRoot* pObject);
109 constexpr u32 getCount(void) const { return _count; }
111 void setCount(u32 count);
113 constexpr u32 getAllocCount(void) const { return _allocCount; }
118 void setAllocCount(u32 count);
120 s32 indexOf(GxClassBaseRoot* pObject) const;
121private:
123 constexpr void getPropertyObject(void* pValue, u32 index) const { *static_cast<GxClassBaseRoot**>(pValue) = (index >= _count) ? nullptr : _ppObject[index]; }
125 constexpr void setPropertyObject(const void* pValue, u32 index){ if(index < _count){ _ppObject[index] = *static_cast<GxClassBaseRoot**>(const_cast<void*>(pValue)); } }
126
128 //-----------------------------------------------------------
130 //-----------------------------------------------------------
132protected:
135 u32 _count;
137
139};
140
141//===========================================================================
143//===========================================================================
145{
146 //-----------------------------------------------------------
148 //-----------------------------------------------------------
150public:
151 // RTTI宣言
153 // GxClassBase継承クラス用禁止宣言
155
156
157 //-----------------------------------------------------------
159 //-----------------------------------------------------------
161
165 GxArrayClassBaseReference(GxAllocatorList::ALLOCATOR_TYPE allocatorType) : Super(allocatorType){}
167 ~GxArrayClassBaseReference(void) override;
168
170 //-----------------------------------------------------------
172 //-----------------------------------------------------------
174
176 void erase(u32 index) override;
177
179 //-----------------------------------------------------------
181 //-----------------------------------------------------------
183
185 void setObject(u32 index, GxClassBaseRoot* pObject) override;
186
188};
189
190GX_CORE_NAMESPACE_END()
#define GX_ALLOCATE_MEMORY(pAllocatorList, size)
Definition GxAllocator.h:536
#define GX_PROHIBIT_CLASS_BASE(__CLASS__)
GxClassBase継承の禁止宣言
Definition GxBase.h:240
メモリアロケータリスト
Definition GxAllocator.h:347
ALLOCATOR_TYPE
アロケータ定義
Definition GxAllocator.h:355
配列クラス
Definition GxArrayClassBase.h:18
constexpr __type & operator[](u32 i)
配列
Definition GxArrayClassBase.h:99
u32 _count
配列数
Definition GxArrayClassBase.h:135
constexpr GxArray::Iterator< __type > begin(void) const
先頭を取得
Definition GxArrayClassBase.h:101
u32 _allocCount
確保した配列数
Definition GxArrayClassBase.h:134
constexpr u32 getCount(void) const
配列数を取得
Definition GxArrayClassBase.h:109
constexpr u32 getAllocCount(void) const
メモリ確保数を取得
Definition GxArrayClassBase.h:113
GX_FORCE_INLINE void removeAll(void)
全削除
Definition GxArrayClassBase.h:74
constexpr GxArray::Iterator< __type > end(void) const
終端を取得
Definition GxArrayClassBase.h:103
GxAllocatorList::ALLOCATOR_TYPE _allocatorType
アロケータ種別
Definition GxArrayClassBase.h:136
GxClassBaseRoot ** _ppObject
配列データ
Definition GxArrayClassBase.h:133
virtual GxClassBaseRoot ** allocateMemory(u32 size)
メモリ確保関数
Definition GxArrayClassBase.h:82
constexpr GxClassBaseRoot * getObject(u32 index) const
オブジェクトの取得
Definition GxArrayClassBase.h:105
constexpr __type & operator[](u32 i) const
const配列
Definition GxArrayClassBase.h:97
virtual u32 expandAllocCount(void)
Definition GxArrayClassBase.h:85
参照カウンタ用配列クラス
Definition GxArrayClassBase.h:145
~GxArrayClassBaseReference(void) override
デストラクタ
Definition GxArrayClassBase.cpp:360
void setObject(u32 index, GxClassBaseRoot *pObject) override
オブジェクトの設定
Definition GxArrayClassBase.cpp:384
GxArrayClassBaseReference(GxAllocatorList::ALLOCATOR_TYPE allocatorType)
コンストラクタ
Definition GxArrayClassBase.h:165
void erase(u32 index) override
解放(nullptrにするだけ)
Definition GxArrayClassBase.cpp:369
オブジェクト基底クラス
Definition GxBase.h:88
基底クラス
Definition GxBase.h:51
イテレータ
Definition GxArray.h:35