15GX_CORE_NAMESPACE_BEGIN()
20#if defined(_MSC_EXTENSIONS)
21#define GX_XML_CDECL __cdecl
26typedef void (GX_XML_CDECL* GxXmlStartElementHandler) (
void* userData, GX_CSTR name, GX_CSTR* pAttribute);
27typedef void (GX_XML_CDECL* GxXmlEndElementHandler) (
void* userData, GX_CSTR name);
28typedef void (GX_XML_CDECL* GxXmlCharacterDataHandler) (
void* userData, GX_CSTR name, s32 len);
30struct GxXmlMemoryHandlingSuite
32 void *(*mallocFunction)(
size_t size);
33 void *(*reallocFunction)(
void* pointer,
size_t size);
34 void (*freeFunction)(
void* pointer);
52 GX_OPERATOR_NEW_DELETE(GxAllocatorList::ALLOCATOR_TYPE::DEVELOP)
55 static constexpr u32 STRING_LENGTH = GxFile::FILE_PATH_MAX;
69 class GxLocalAllocator
77 GX_OPERATOR_NEW_DELETE(GxAllocatorList::ALLOCATOR_TYPE::DEVELOP)
86 GxLocalAllocator(
void);
89 GxLocalAllocator(GxLocalAllocator* pPrevious, u32 size);
91 ~GxLocalAllocator(
void);
95 GxLocalAllocator(
const GxLocalAllocator&);
97 GX_FORCE_INLINE
const GxLocalAllocator& operator=(
const GxLocalAllocator&);
106 void* allocateMemory(u32 size);
108 constexpr void freeMemory(
void* ) {}
116 GxLocalAllocator* _pNext;
134 GxAttribute(
void) : _name(nullptr), _value(nullptr) {}
136 ~GxAttribute(
void) {}
140 GxAttribute(
const GxAttribute&);
142 GX_FORCE_INLINE
const GxAttribute& operator=(
const GxAttribute&);
151 GX_CSTR getName(
void)
const;
153 void setName(GX_CSTR name);
155 GX_STR getValue(
void);
157 GX_CSTR getValue(
void)
const;
159 void setValue(GX_CSTR value, u32 stringEncode);
183 static constexpr u32 ATTRIUBUTE_MAX = 6;
184 static constexpr u32 ELEMENT_NAME_LENGTH_MAX = 32;
193 GxElement(
void) : _name(nullptr), _attributeNum(0) { GX_MEMSET(_pAttribute, 0,
sizeof(_pAttribute)); }
204 GX_CSTR getName(
void)
const;
206 void setName(GX_CSTR name);
208 u32 getAttributeNum(
void)
const;
210 const GxAttribute* getAttribute(u32 index)
const;
212 const GxAttribute* getAttribute(GX_CSTR name)
const;
214 GX_CSTR getAttributeValue(GX_CSTR name)
const;
216 void addAttribute(GX_CSTR name, GX_CSTR value, u32 stringEncode);
226 GxAttribute* _pAttribute[ATTRIUBUTE_MAX];
242 GxNode(
void) : _pChild(nullptr)
245 , _pPrevious(nullptr)
253 GxNode(
const GxElement&);
255 GX_FORCE_INLINE
const GxNode& operator=(
const GxNode&);
264 constexpr GxNode* getChild(
void)
const {
return _pChild; }
266 constexpr void setChild(GxNode* pChild) { _pChild = pChild; }
268 constexpr GxNode* getParent(
void)
const {
return _pParent; }
270 constexpr void setParent(GxNode* pParent) { _pParent = pParent; }
272 constexpr GxNode* getNext(
void)
const {
return _pNext; }
274 constexpr void setNext(GxNode* pNext) { _pNext = pNext; }
276 constexpr GxNode* getPrevious(
void)
const {
return _pPrevious; }
278 constexpr void setPrevious(GxNode* pPrevious) { _pPrevious = pPrevious; }
280 GX_FORCE_INLINE GxElement* getElement(
void) {
return &_element; }
282 GX_FORCE_INLINE
const GxElement* getElement(
void)
const {
return &_element; }
284 GX_FORCE_INLINE
void setElement(
const GxElement& element) { _element = element; }
286 constexpr GX_CSTR getString(
void)
const {
return _string; }
288 void setString(GX_CSTR
string, u32 length);
290 GxNode* addChild(
void);
292 GxNode* addNext(
void);
294 const GxNode* findNode(GX_CSTR elementName,
b32 isSkipTopNode =
false)
const;
296 const GxNode* findNodeChild(GX_CSTR elementName,
b32 isSkipTopNode =
false,
b32 isSkipNextNode =
false)
const;
298 const GxNode* findNodeNext(GX_CSTR elementName,
b32 isSkipTopNode =
false)
const;
300 const GxNode* findNode(GX_CSTR elementName, GX_CSTR attribute, GX_CSTR value,
b32 isSkipTopNode =
false)
const;
302 const GxNode* findNodeChild(GX_CSTR elementName, GX_CSTR attribute, GX_CSTR value,
b32 isSkipTopNode =
false)
const;
304 const GxNode* findNodeNext(GX_CSTR elementName, GX_CSTR attribute, GX_CSTR value,
b32 isSkipTopNode =
false)
const;
306 u32 countNode(GX_CSTR elementName, GX_CSTR attribute, GX_CSTR value)
const;
308 u32 countNodeChild(GX_CSTR elementName, GX_CSTR attribute, GX_CSTR value)
const;
310 u32 countNodeNext(GX_CSTR elementName, GX_CSTR attribute, GX_CSTR value)
const;
337 ~GxXmlParser(
void)
override { terminate(); }
342 void terminate(
void);
351 void addStartElement(GX_CSTR elementName);
353 void addAttribute(GX_CSTR attribute, GX_CSTR value);
355 void addValue(GX_CSTR value, u32 length = 0);
357 void addEndElement(
void);
360 void setDefaultHandler(
void);
362 void setUserHandler(
void* pUserData, GxXmlStartElementHandler startElementHandler, GxXmlEndElementHandler endElementHandler, GxXmlCharacterDataHandler characterDataHandler);
368 GX_FORCE_INLINE
static void* xmlMalloc(
size_t size) {
return GX_ALLOCATE_MEMORY(getGxAllocatorList(GxAllocatorList::ALLOCATOR_TYPE::DEVELOP),
static_cast<u32
>(size)); }
372 GX_FORCE_INLINE
static void* xmlRealloc(
void* pAddress,
size_t size) {
return GX_REALLOC_MEMORY(pAddress,
static_cast<u32
>(size)); }
376 static void GX_XML_CDECL callbackStartElement(
void* pUserData, GX_CSTR elementName, GX_CSTR* pAttributes);
378 static void GX_XML_CDECL callbackEndElement(
void* pUserData, GX_CSTR elementName);
380 static void GX_XML_CDECL callbackCharacterData(
void* pUserData, GX_CSTR data, s32 length);
389 constexpr GxNode* getRootNode(
void)
const {
return _pRootNode; }
391 constexpr u32 getDepth(
void)
const {
return _depth; }
393#if defined(GX_THREAD_LOCAL_STORAGE)
395 static constexpr void setActiveAllocator(GxLocalAllocator* pLocalAllocator) { _pActiveAllocator = pLocalAllocator; }
397 GX_FORCE_INLINE
static GxLocalAllocator* getActiveAllocator(
void) {
return _pActiveAllocator; }
400 GX_FORCE_INLINE static const void setActiveAllocator(GxLocalAllocator* pLocalAllocator) { _pActiveAllocator[GxThread::getCurrentThread()->getIndex()] = pLocalAllocator; }
405 constexpr void setStringEncode(u32 encode) { _stringEncode = encode; }
415 GxXmlStartElementHandler _pUserStartElementHandler;
416 GxXmlEndElementHandler _pUserEndElementHandler;
417 GxXmlCharacterDataHandler _pUserCharacterDataHandler;
419 GxNode* _pCurrentNode;
424 static const GxXmlMemoryHandlingSuite _xmlFunctions;
425#if defined(GX_THREAD_LOCAL_STORAGE)
426 static GX_THREAD_LOCAL_STORAGE GxLocalAllocator* _pActiveAllocator;
431 GxLocalAllocator* _pLocalAllocator;
432 GxLocalAllocator* _pOldAllocator;
451 GX_OPERATOR_NEW_DELETE(GxAllocatorList::ALLOCATOR_TYPE::DEVELOP)
470 static GX_CSTR XML_DECLARATION_STRING;
481 ~GxXmlWriter(
void)
override { terminate(); }
486 void terminate(
void);
495 b32 writeXmlDeclaration(
void);
497 b32 writeStartElement(GX_CSTR elementName);
499 b32 writeAttribute(GX_CSTR attributeName, GX_CSTR value);
501 b32 writeValue(GX_CSTR value, u32 length = 0);
503 b32 writeEndElement(
void);
507 b32 writeXmlBOM(
void);
509 b32 writeXmlTabs(
void);
511 b32 writeXmlSpace(
void);
513 b32 writeXmlReturn(
void);
515 b32 writeXmlString(GX_CSTR
string);
517 b32 writeXmlStartElementTop(
void);
519 b32 writeXmlStartElementEnd(
void);
521 b32 writeXmlStartElementEndForOnlyStartElement(
void);
523 b32 writeXmlEndElementTop(
void);
525 b32 writeXmlEndElementEnd(
void);
527 b32 writeXmlAttributeValueStart(
void);
529 b32 writeXmlAttributeValueEnd(
void);
531 GX_FORCE_INLINE
void setWriteXmlTabs(
b32 enable) { _isWriteXmlTabs = enable; }
540 constexpr void setStringEncode(u32 encode) { _stringEncode = encode; }
558GX_CORE_NAMESPACE_END()
#define GX_ALLOCATE_MEMORY(pAllocatorList, size)
Definition GxAllocator.h:536
#define GX_SAFE_FREE_MEMORY(pAddress)
Definition GxAllocator.h:594
#define GX_REALLOC_MEMORY(pAddress, size)
Definition GxAllocator.h:621
#define GX_PROHIBIT_CLASS_BASE(__CLASS__)
GxClassBase継承の禁止宣言
Definition GxBase.h:240
配列クラス
Definition GxArray.h:18
オブジェクト基底クラス
Definition GxBase.h:88
static constexpr u32 VALUE_4K
4K
Definition GxMath.h:131
ストリーム基礎クラス
Definition GxStream.h:20
ストリーム書き込みクラス
Definition GxStreamWriter.h:19
static GxThread * getCurrentThread(void)
カレントスレッドを取得
Definition GxThread.cpp:505
constexpr u32 getIndex(void) const
インデックスを取得
Definition GxThread.h:251
static constexpr u32 THREAD_MAX
スレッドの最大数
Definition GxThread.h:188
32bitブーリアン
Definition GxDefine.h:173