OROCHI
 
Loading...
Searching...
No Matches
GxSerializer.h
Go to the documentation of this file.
1//===========================================================================
10//===========================================================================
11#pragma once
12
13GX_CORE_NAMESPACE_BEGIN()
14
15//---------------------------------------------------------------------------
17//---------------------------------------------------------------------------
19{
20 //-----------------------------------------------------------
22 //-----------------------------------------------------------
24public:
27 {
28 //-----------------------------------------------------------
30 //-----------------------------------------------------------
32 public:
33 // RTTI定義
37 {
38 //-----------------------------------------------------------
40 //-----------------------------------------------------------
42 public:
43 // new, delete定義
44 GX_OPERATOR_NEW_DELETE_USE_ARRAY(GxAllocatorList::ALLOCATOR_TYPE::TEMPORARY);
45
47 };
48 // new, delete定義
49 GX_OPERATOR_NEW_DELETE_USE_ARRAY(GxAllocatorList::ALLOCATOR_TYPE::TEMPORARY);
50
52 //-----------------------------------------------------------
54 //-----------------------------------------------------------
56
59
61 //-----------------------------------------------------------
63 //-----------------------------------------------------------
65
67 GxNode* allocNode(s32 count) override { return GX_NEW GxTemporaryPropartyNode[count]; }
69 void freeNode(GxNode* pNode) override { deteleTemporaryNode(&pNode); }
70 private:
72 void deteleTemporaryNode(GxNode** ppNode);
73
75 };
76
77 // new, delete定義
78 GX_OPERATOR_NEW_DELETE(GxAllocatorList::ALLOCATOR_TYPE::TEMPORARY);
79
81 //-----------------------------------------------------------
83 //-----------------------------------------------------------
85
87 GxSerializeStackNode(GxTypedObject* pObject, const GxRtti* pRtti);
92
94 //-----------------------------------------------------------
96 //-----------------------------------------------------------
98
100 GX_FORCE_INLINE GxProperty* getPropertyAt(s32 index) const { return &(*_pPropertyTable)[index]; }
102 GxProperty* getTop(void);
104 GxProperty* shiftProperty(void);
106 GxProperty* getCurrentProperty(void) const { return static_cast<u32>(_propertyTableIndex) >= _pPropertyTable->getCount() ? nullptr : getPropertyAt(_propertyTableIndex); }
108 s32 getArrayIndex(void);
110 s32 shiftArrayIndex(void);
111
113 //-----------------------------------------------------------
115 //-----------------------------------------------------------
117public:
125
127};
128
129//===========================================================================
131//===========================================================================
133{
134 //-----------------------------------------------------------
136 //-----------------------------------------------------------
138private:
139 static GX_CSTR XML_ELEMENT_STRING_ROOT;
140 static GX_CSTR XML_ELEMENT_STRING_DYNAMIC_ARRAY;
141 static GX_CSTR XML_ELEMENT_STRING_STATIC_ARRAY;
142
143 static GX_CSTR XML_ATTRIBUTE_STRING_ROOT_NAME;
144 static GX_CSTR XML_ATTRIBUTE_STRING_ROOT_TYPE;
145 static GX_CSTR XML_ATTRIBUTE_STRING_ROOT_INDEX;
146 static GX_CSTR XML_ATTRIBUTE_STRING_OBJECT_COUNT;
147 static GX_CSTR XML_ATTRIBUTE_STRING_ARRAY_NAME;
148 static GX_CSTR XML_ATTRIBUTE_STRING_ARRAY_COUNT;
149 static GX_CSTR XML_ATTRIBUTE_STRING_PROPERTY_NAME;
150 static GX_CSTR XML_ATTRIBUTE_STRING_CLASS_TYPE;
151 static GX_CSTR XML_ATTRIBUTE_STRING_CLASS_INDEX;
152 static GX_CSTR XML_ATTRIBUTE_STRING_CLASS_INSTANCE;
153 static GX_CSTR XML_ATTRIBUTE_STRING_CUSTOM_PROPERTY_TYPE;
154 static GX_CSTR XML_ATTRIBUTE_STRING_CUSTOM_PROPERTY_KIND;
155 static GX_CSTR XML_ATTRIBUTE_STRING_CUSTOM_PROPERTY_COUNT;
156 static GX_CSTR XML_ATTRIBUTE_STRING_CUSTOM_PROPERTY_VALUE;
157 static GX_CSTR XML_ATTRIBUTE_STRING_DATA_VALUE;
158
159 static constexpr u32 XML_ATTRIBUTE_MAX = 8;
160
162 enum class XML_ELEMENT_TYPE
163 {
164 ROOT = 0,
165 DYNAMIC_ARRAY,
166 STATIC_ARRAY,
167 CLASSNAME,
168
169 MAX
170 };
171
173 enum class XML_ATTRIBUTE_TYPE
174 {
175 ROOT_NAME = 0,
176 ROOT_TYPE,
177 ROOT_INDEX,
178 OBJECT_COUNT,
179 ARRAY_NAME,
180 ARRAY_COUNT,
181 PROPERTY_NAME,
182 CLASS_TYPE,
183 CLASS_INDEX,
184 CLASS_INSTANCE,
185 CUSTOM_PROPERTY_NAME,
186 CUSTOM_PROPERTY_KIND,
187 CUSTOM_PROPERTY_COUNT,
188 CUSTOM_PROPERTY_VALUE,
189 DATA_VALUE,
190
191 MAX
192 };
193
194 //===========================================================================
196 //===========================================================================
197 class GxBinarySerializer
198 {
199 //-----------------------------------------------------------
201 //-----------------------------------------------------------
203 public:
204 static constexpr u32 VERSION = 110;
205
206 private:
207 // ヘッダー
208 struct Header
209 {
210 u32 _version;
211 u32 _rttiId;
212 u32 _objectCount;
213 };
214
216 //-----------------------------------------------------------
218 //-----------------------------------------------------------
220 private:
222 GxBinarySerializer(void) {}
223
224 public:
226 GxBinarySerializer(GxStream* pStream) : _pStream(pStream) { GX_MEMSET(&_header, 0, sizeof(Header)); }
228 ~GxBinarySerializer(void) {}
229
230 private:
232 GxBinarySerializer(const GxBinarySerializer&);
234 GX_FORCE_INLINE const GxBinarySerializer& operator=(const GxBinarySerializer&);
235
237 //-----------------------------------------------------------
239 //-----------------------------------------------------------
241
242 public:
244 b32 read(void* pDst, u32 size);
246 b32 read(u8& dst) { u32 temporary; b32 result = read(&temporary, sizeof(temporary)); dst = static_cast<u8>(temporary); return result; }
248 b32 read(s8& dst) { u32 temporary; b32 result = read(&temporary, sizeof(temporary)); dst = static_cast<s8>(temporary); return result; }
250 b32 read(u16& dst) { u32 temporary; b32 result = read(&temporary, sizeof(temporary)); dst = static_cast<u16>(temporary); return result; }
252 b32 read(s16& dst) { u32 temporary; b32 result = read(&temporary, sizeof(temporary)); dst = static_cast<s16>(temporary); return result; }
254 b32 read(u32& dst) { u32 temporary; b32 result = read(&temporary, sizeof(temporary)); dst = static_cast<u32>(temporary); return result; }
256 b32 read(s32& dst) { u32 temporary; b32 result = read(&temporary, sizeof(temporary)); dst = static_cast<s32>(temporary); return result; }
258 b32 read(u64& dst) { return read(&dst, sizeof(dst)); }
260 b32 read(s64& dst) { return read(&dst, sizeof(dst)); }
262 b32 read(u128& dst) { return read(&dst, sizeof(dst)); }
264 b32 read(s128& dst) { return read(&dst, sizeof(dst)); }
266 b32 read(b32& dst) { u32 temporary; b32 result = read(temporary); dst = (temporary) ? true : false; return result; }
268 b32 readHeader(const GxRtti* pRtti, u32* pObjectCount);
270 b32 write(const void* pSrc, u32 size);
272 b32 write(const u8& src) { u32 temporary = src; return write(&temporary, sizeof(temporary)); }
274 b32 write(const s8& src) { s32 temporary = src; return write(&temporary, sizeof(temporary)); }
276 b32 write(const u16& src) { u32 temporary = src; return write(&temporary, sizeof(temporary)); }
278 b32 write(const s16& src) { s32 temporary = src; return write(&temporary, sizeof(temporary)); }
280 b32 write(const u32& src) { u32 temporary = src; return write(&temporary, sizeof(temporary)); }
282 b32 write(const s32& src) { s32 temporary = src; return write(&temporary, sizeof(temporary)); }
284 b32 write(const u64& src) { return write(&src, sizeof(src)); }
286 b32 write(const s64& src) { return write(&src, sizeof(src)); }
288 b32 write(const u128& src) { return write(&src, sizeof(src)); }
290 b32 write(const s128& src) { return write(&src, sizeof(src)); }
292 b32 write(const b32& src) { u32 temporary = src._boolean; return write(temporary); }
294 b32 writeHeader(const GxRtti* pRtti, u32 objectCount);
296 b32 writePropertyId(const GxProperty* pProperty = nullptr);
298 b32 writeRttiId(const GxRtti* pRtti = nullptr);
300 b32 isFileEnd(void) const { GX_ASSERT(_pStream, "_pStream not initialize!!"); return _pStream->isEnd(); }
302 s32 getRemainSize(void) const { GX_ASSERT(_pStream, "_pStream not initialize!!"); return _pStream->getRemainSize(); }
303
305 //-----------------------------------------------------------
307 //-----------------------------------------------------------
309 private:
310 GxStream* _pStream;
311 Header _header;
312
314 };
315
316 //===========================================================================
318 //===========================================================================
319 class GxObjectNode : public GxClassBaseReference
320 {
321 //-----------------------------------------------------------
323 //-----------------------------------------------------------
325 public:
326 // RTTI定義
327 GX_RTTI_CLASS(GxObjectNode, GxClassBaseReference)
328 // GxClassBaseReference継承クラス用禁止宣言
330 // new, delete定義
331 GX_OPERATOR_NEW_DELETE(GxAllocatorList::ALLOCATOR_TYPE::TEMPORARY)
332
333 public:
335 static constexpr s32 ARRAY_ELEMENT_INDEX_VALUE = -2;
336
338 //-----------------------------------------------------------
340 //-----------------------------------------------------------
342 private:
344 GxObjectNode(void) : _pObject(nullptr), _pObjectRtti(nullptr), _pPropertyTable(nullptr), _pProperty(nullptr), _pOwner(nullptr), _pObjectInstance(nullptr) {}
345
346 public:
348 GxObjectNode(void* pObject, const GxRtti* pObjectRtti, GxPropertyTable* pPropertyTable, GxProperty* pProperty, void* pOwner, u32 arrayIndex, b32 isHavingInstance, s32 objectIndex)
349 : _pObject(pObject)
350 , _pObjectRtti(pObjectRtti)
351 , _pPropertyTable(pPropertyTable)
352 , _pProperty(pProperty)
353 , _pOwner(pOwner)
354 , _arrayIndex(arrayIndex)
355 , _arrayCount(0)
356 , _isHavingInstance(isHavingInstance)
357 , _objectIndex(objectIndex)
358 , _pObjectInstance(nullptr)
359 {}
360
362 b32 operator==(const GxObjectNode& node) const;
363
365 //-----------------------------------------------------------
367 //-----------------------------------------------------------
369 public:
371 b32 isPointerType(void) const;
373 constexpr void setObject(void* pObject) { _pObject = pObject; }
375 constexpr void* getObject(void) const { return _pObject; }
377 constexpr void setObjectRtti(const GxRtti* pObjectRtti) { _pObjectRtti = pObjectRtti; }
379 GX_FORCE_INLINE const GxRtti* getObjectRtti(void) const { return _pObjectRtti; }
381 constexpr GxPropertyTable* getPropertyTable(void) { return _pPropertyTable; }
383 constexpr void setProperty(GxProperty* pProperty) { _pProperty = pProperty; }
385 constexpr GxProperty* getProperty(void) const { return _pProperty; }
387 constexpr void setOwner(void* pOwner) { _pOwner = pOwner; }
389 constexpr void* getOwner(void) const { return _pOwner; }
391 constexpr u32 getArrayIndex(void) const { return _arrayIndex; }
393 constexpr u32 incrementArrayIndex(void) { return ++_arrayIndex; }
395 constexpr void setArrayCount(u32 count) { _arrayCount = count; }
397 constexpr u32 getArrayCount(void) const { return _arrayCount; }
399 constexpr void setObjectIndex(s32 objectIndex) { _objectIndex = objectIndex; }
401 constexpr s32 getObjectIndex(void) const { return _objectIndex; }
403 GX_FORCE_INLINE b32 isHavingInstance(void) const { return _isHavingInstance; }
405 GX_FORCE_INLINE void setHavingInstance(b32 flag) { _isHavingInstance = flag; }
407 constexpr void setObjectInstance(GxObjectNode* pObjectInstance) { _pObjectInstance = pObjectInstance; }
409 constexpr GxObjectNode* getObjectInstance(void) const { return _pObjectInstance; }
411 GX_FORCE_INLINE b32 isArrayElement(void) const { return (_objectIndex == ARRAY_ELEMENT_INDEX_VALUE); }
412
414 //-----------------------------------------------------------
416 //-----------------------------------------------------------
418 private:
419 void* _pObject;
420 const GxRtti* _pObjectRtti;
421 GxPropertyTable* _pPropertyTable;
422 GxProperty* _pProperty;
423 void* _pOwner;
424 u32 _arrayIndex;
425 u32 _arrayCount;
426 b32 _isHavingInstance;
427 s32 _objectIndex;
428 GxObjectNode* _pObjectInstance;
429
431 };
432
433 //===========================================================================
435 //===========================================================================
436 class GxObjectTree : public GxTree
437 {
438 //-----------------------------------------------------------
440 //-----------------------------------------------------------
442 public:
443 // Rtti定義
444 GX_RTTI_CLASS(GxObjectTree, GxTree)
445 // GxClassBase継承クラス用禁止宣言
446 GX_PROHIBIT_CLASS_BASE(GxObjectTree)
447 // new, delete定義
448 GX_OPERATOR_NEW_DELETE(GxAllocatorList::ALLOCATOR_TYPE::TEMPORARY)
449
450
451 //-----------------------------------------------------------
453 //-----------------------------------------------------------
455 public:
457 GxObjectTree(void);
459 ~GxObjectTree(void);
460
462 //-----------------------------------------------------------
464 //-----------------------------------------------------------
466 public:
468 void initializeForSerialize(GxTypedObject* pObject, const GxRtti* pRtti, GxPropertyTable* pPropertyTable, b32 isDifference);
470 void initializeForDeserialize(GxTypedObject* pObject, const GxRtti* pRtti, GxPropertyTable* pPropertyTable);
471
473 b32 createObjectList(u32 objectListCount);
474
476 void setObjectInstancePointer(void);
477
479 void addRoot(GxTypedObject* pObject, const GxRtti* pRtti, GxPropertyTable* pPropertyTable);
481 void addChild(GxTypedObject* pObject, const GxRtti* pRtti, GxPropertyTable* pPropertyTable, GxProperty* pProperty, GxTypedObject* pOwner, u32 arrayIndex, b32 isHavingInstance, s32 objectIndex);
482
483 private:
485 b32 addPropertyObject(GxTypedObject* pOwner, const GxRtti* pOwnerRtti, GxPropertyTable* pPropertyTable, b32 isDifference = false, GxTypedObject* pDefaultObject = nullptr);
487 b32 checkCurrentNodeInstance(void);
488
490 GxTree::GxNode* findObjectNode(const GxObjectNode* pNode);
492 GxTree::GxNode* findObjectNode(s32 objectIndex);
493
495 void setObjectNodeIndex(void);
496
498 //-----------------------------------------------------------
500 //-----------------------------------------------------------
502 public:
504 constexpr GxTree::GxNode* getCurrentNode(void) { return _pCurrent; }
506 constexpr void setCurrentNode(GxTree::GxNode* pNode) { _pCurrent = pNode; }
508 GX_FORCE_INLINE void setCurrentNodeToParent(void) { _pCurrent = _pCurrent->getParent(); }
510 GX_FORCE_INLINE void setCurrentNodeToChild(void) { _pCurrent = _pCurrent->getChild(); }
512 constexpr u32 getObjectIndexCount(void) const { return _objectIndexCount; }
514 constexpr void setObjectList(void* pObject, u32 objectIndex) { _ppObjectList[objectIndex] = pObject; }
516 constexpr void* getObjectList(u32 objectIndex) { return _ppObjectList[objectIndex]; }
517
519 //-----------------------------------------------------------
521 //-----------------------------------------------------------
523 private:
524 GxTree::GxNode* _pCurrent;
525 void** _ppObjectList;
526 u32 _objectListCount;
527 u32 _objectIndexCount;
528
530 };
531
532 // コピー禁止
534
535
536 //-----------------------------------------------------------
538 //-----------------------------------------------------------
540
541public:
543 GxSerializer(void);
545 ~GxSerializer(void);
546
548 //-----------------------------------------------------------
550 //-----------------------------------------------------------
552public:
553#if GX_DEVELOP
555 b32 serializeXml(GxStream& stream, GxTypedObject* pObject, const GxRtti& rtti, b32 isDifference = false);
557 b32 serializeXml(GxStream& stream, GxTypedObject* pObject, GxPropertyTable& propertyTable, b32 isDifference = false);
559 b32 serializeJson(GxStream& stream, GxTypedObject* pObject, const GxRtti& rtti, b32 isCompress = false, b32 useRtti = true, b32 isDifference = false);
561 b32 serializeJson(GxStream& stream, GxTypedObject* pObject, GxPropertyTable& propertyTable, b32 isDifference = false);
562
564 b32 deserializeXml(GxStream& stream, GxTypedObject* pObject, const GxRtti& rtti, b32 isCreatePointerObject = true);
566 b32 deserializeXml(GxStream& stream, GxTypedObject* pObject, GxPropertyTable& propertyTable, b32 isCreatePointerObject = true);
568 void registerFallbackFunction(GxProperty::PROPERTY_FUNCTION_FROM_STRING pFunction);
570 b32 deserializeJson(GxStream& stream, GxTypedObject* pObject, const GxRtti& rtti, b32 isCreatePointerObject = true);
572 b32 deserializeJson(GxStream& stream, GxTypedObject* pObject, GxPropertyTable& propertyTable, b32 isCreatePointerObject = true);
573#endif // GX_DEVELOP
575 b32 serializeBinary(GxStream& stream, GxTypedObject* pObject, const GxRtti& rtti, b32 isDifference = false);
577 b32 serializeBinary(GxStream& stream, GxTypedObject* pObject, GxPropertyTable& propertyTable, b32 isDifference = false);
579 b32 deserializeBinary(GxStream& stream, GxTypedObject* pObject, const GxRtti& rtti);
581 b32 deserializeBinary(GxStream& stream, GxTypedObject* pObject, GxPropertyTable& propertyTable);
582
583private:
584#if GX_DEVELOP
586 b32 serializeObjectXml(GxTypedObject* pObject, GxPropertyTable* pPropertyTable, b32 isDifference = false, GxTypedObject* pDefaultObject = nullptr);
588 b32 serializeObjectJson(GxTypedObject* pObject, GxPropertyTable* pPropertyTable, GxJson* pJson, GxJson::GxJsonObject* pCurrentObject, b32 useRtti = true, b32 isDifference = false, GxTypedObject* pDefaultObject = nullptr);
590 b32 deserializeObjectXml(GxTypedObject* pObject, GxPropertyTable* pPropertyTable);
592 b32 deserializeObjectJson(GxTypedObject* pObject, GxPropertyTable* pPropertyTable, const GxJson::GxJsonNode& rootJsonNode);
594 b32 checkDeserializeObjectBinary(GxTypedObject* pObject, GxPropertyTable* pPropertyTable);
595#endif // GX_DEVELOP
597 b32 serializeObjectBinary(GxTypedObject* pObject, GxPropertyTable* pPropertyTable, b32 isDifference = false);
599 b32 deserializeObjectBinary(GxTypedObject* pObject, GxPropertyTable* pPropertyTable);
600
602 b32 initializeBinary(GxStream& stream);
604 void terminateBinary(void);
605
606#if GX_DEVELOP
608 b32 initializeXmlParser(GxStream& stream);
610 void terminateXmlParser(void);
612 b32 initializeXMLWriter(GxStream& stream);
614 void terminateXMLWriter(void);
615
617 b32 registerTreeObjectProperty(GxTypedObject* pObject, const GxRtti& rtti);
618
620 static void GX_XML_CDECL callbackStartElement(void* pUserData, GX_CSTR elementName, GX_CSTR* ppAttributes);
622 static void GX_XML_CDECL callbackEndElement(void* pUserData, GX_CSTR elementName);
623
625 static b32 isElementType(GX_CSTR elementTag, XML_ELEMENT_TYPE xmlElementType);
627 static b32 isAttributeType(GX_CSTR attributeTag, XML_ATTRIBUTE_TYPE xmlAttributeType);
628
630 GX_CSTR getRootObjectName(void) const;
632 GX_CSTR getStartElementAttribute(GX_CSTR* ppAttributes, XML_ATTRIBUTE_TYPE type, u32 paramIndex = 0);
633#endif // GX_DEVELOP
634
636 //-----------------------------------------------------------
638 //-----------------------------------------------------------
640private:
641 b32 _isFailed;
642 u32 _depthFailed;
643 b32 _isCreatePointerObject;
644 GxObjectTree* _pObjectTree;
645
646 GxBinarySerializer* _pBinarySerializer;
647
648#if GX_DEVELOP
649 GxXmlParser* _pXmlParser;
650 GxXmlWriter* _pXmlWriter;
651 s32 _startElementAttributeIndex[static_cast<s32>(XML_ATTRIBUTE_TYPE::MAX)];
652 GxProperty::PROPERTY_FUNCTION_FROM_STRING _pFallbackFunction;
653#endif // GX_DEVELOP
654
656};
657
658GX_CORE_NAMESPACE_END()
#define GX_PROHIBIT_CLASS_BASE_REFERENCE(__CLASS__)
GxClassBaseReference継承の禁止宣言(new以外の生成禁止 + コピー禁止)
Definition GxBase.h:244
#define GX_PROHIBIT_COPY(__CLASS__)
コピー禁止
Definition GxBase.h:233
#define GX_PROHIBIT_CLASS_BASE(__CLASS__)
GxClassBase継承の禁止宣言
Definition GxBase.h:240
@ MAX
定義数
void GxTypedObject
その他
Definition GxDefine.h:213
@ ROOT
累乗根補間
参照オブジェクト基底クラス
Definition GxBase.h:122
JSON解析用ノード
Definition GxJson.h:108
JSONパーサ
Definition GxJson.h:20
プロパティクラス
Definition GxProperty.h:48
登録ノードクラス
Definition GxProperty.h:1652
プロパティテーブルクラス
Definition GxProperty.h:1641
実行時型情報クラス
Definition GxRtti.h:154
TemporaryAllocatorを利用するようにしたプロパティテーブル
Definition GxSerializer.h:27
void freeNode(GxNode *pNode) override
Node配列の解放
Definition GxSerializer.h:69
GxNode * allocNode(s32 count) override
Node配列の確保
Definition GxSerializer.h:67
非再帰でシリアライズ/デシリアライズするためのスタック用ノード
Definition GxSerializer.h:19
GX_FORCE_INLINE GxProperty * getPropertyAt(s32 index) const
特定indexのプロパティを取得
Definition GxSerializer.h:100
GxProperty * getCurrentProperty(void) const
現在指しているプロパティを取得
Definition GxSerializer.h:106
b32 _useRttiTable
処理一時停止
Definition GxSerializer.h:124
s32 _arrayCount
処理中配列数
Definition GxSerializer.h:122
GxTemporaryPropertyTable * _pPropertyTable
処理対象プロパティテーブル
Definition GxSerializer.h:119
s32 _arrayIndex
処理中配列インデックス
Definition GxSerializer.h:121
GxTypedObject * _pObject
処理対象オブジェクト
Definition GxSerializer.h:118
b32 _isProcessing
処理中フラグ
Definition GxSerializer.h:123
s32 _propertyTableIndex
処理中プロパティテーブル番号
Definition GxSerializer.h:120
シリアライザ
Definition GxSerializer.h:133
b32 deserializeBinary(GxStream &stream, GxTypedObject *pObject, const GxRtti &rtti)
デシリアライズ:バイナリ形式
Definition GxSerializer.cpp:739
~GxSerializer(void)
デストラクタ
Definition GxSerializer.cpp:199
b32 serializeBinary(GxStream &stream, GxTypedObject *pObject, const GxRtti &rtti, b32 isDifference=false)
シリアライズ:バイナリ形式
Definition GxSerializer.cpp:641
GxSerializer(void)
コンストラクタ
Definition GxSerializer.cpp:175
ストリーム基礎クラス
Definition GxStream.h:20
virtual b32 isEnd(void) const
ファイル終端判定
Definition GxStream.h:91
GX_FORCE_INLINE s32 getRemainSize(void) const
残サイズ取得
Definition GxStream.h:94
ツリーノードクラス
Definition GxTree.h:364
constexpr GxTree::GxNode * getChild(void) const
子ノード取得
Definition GxTree.h:406
GX_FORCE_INLINE GxTree::GxNode * getParent(void)
親ノード取得
Definition GxTree.h:404
ツリー構造クラス (クラスオブジェクト)
Definition GxTree.h:277
u32 _boolean
真偽値
Definition GxDefine.h:168
32bitブーリアン
Definition GxDefine.h:173