24#ifndef TINYXML2_INCLUDED
25#define TINYXML2_INCLUDED
27#if defined(ANDROID_NDK) || defined(__BORLANDC__) || defined(__QNXNTO__)
56#if defined( _DEBUG ) || defined (__DEBUG__)
57# ifndef TINYXML2_DEBUG
58# define TINYXML2_DEBUG
64# pragma warning(disable: 4251)
68# ifdef TINYXML2_EXPORT
69# define TINYXML2_LIB __declspec(dllexport)
70# elif defined(TINYXML2_IMPORT)
71# define TINYXML2_LIB __declspec(dllimport)
76# define TINYXML2_LIB __attribute__((visibility("default")))
82#if !defined(TIXMLASSERT)
83#if defined(TINYXML2_DEBUG)
86# define TIXMLASSERT( x ) do { if ( !((void)0,(x))) { __debugbreak(); } } while(false)
87# elif defined (ANDROID_NDK)
88# include <android/log.h>
89# define TIXMLASSERT( x ) do { if ( !(x)) { __android_log_assert( "assert", "grinliz", "ASSERT in '%s' at %d.", __FILE__, __LINE__ ); } } while(false)
92# define TIXMLASSERT assert
95# define TIXMLASSERT( x ) do {} while(false)
102static const int TIXML2_MAJOR_VERSION = 9;
103static const int TIXML2_MINOR_VERSION = 0;
104static const int TIXML2_PATCH_VERSION = 0;
106#define TINYXML2_MAJOR_VERSION 9
107#define TINYXML2_MINOR_VERSION 0
108#define TINYXML2_PATCH_VERSION 0
115static const int TINYXML2_MAX_ELEMENT_DEPTH = 100;
140 NEEDS_ENTITY_PROCESSING = 0x01,
141 NEEDS_NEWLINE_NORMALIZATION = 0x02,
142 NEEDS_WHITESPACE_COLLAPSING = 0x04,
144 TEXT_ELEMENT = NEEDS_ENTITY_PROCESSING | NEEDS_NEWLINE_NORMALIZATION,
145 TEXT_ELEMENT_LEAVE_ENTITIES = NEEDS_NEWLINE_NORMALIZATION,
147 ATTRIBUTE_VALUE = NEEDS_ENTITY_PROCESSING | NEEDS_NEWLINE_NORMALIZATION,
148 ATTRIBUTE_VALUE_LEAVE_ENTITIES = NEEDS_NEWLINE_NORMALIZATION,
149 COMMENT = NEEDS_NEWLINE_NORMALIZATION
152 StrPair() : _flags( 0 ), _start( 0 ), _end( 0 ) {}
155 void Set(
char* start,
char* end,
int flags ) {
161 _flags = flags | NEEDS_FLUSH;
155 void Set(
char* start,
char* end,
int flags ) {
…}
164 const char* GetStr();
167 return _start == _end;
172 _start =
const_cast<char*
>(str);
175 void SetStr(
const char* str,
int flags=0 );
177 char* ParseText(
char* in,
const char* endTag,
int strFlags,
int* curLineNumPtr );
178 char* ParseName(
char* in );
180 void TransferTo(
StrPair* other );
184 void CollapseWhitespace();
195 StrPair(
const StrPair& other );
196 void operator=(
const StrPair& other );
205template <
class T,
int INITIAL_SIZE>
211 _allocated( INITIAL_SIZE ),
217 if ( _mem != _pool ) {
228 EnsureCapacity( _size+1 );
236 EnsureCapacity( _size+count );
237 T* ret = &_mem[_size];
269 return _mem[ _size - 1];
285 _mem[i] = _mem[_size - 1];
303 void EnsureCapacity(
int cap ) {
305 if ( cap > _allocated ) {
307 const int newAllocated = cap * 2;
308 T* newMem =
new T[newAllocated];
310 memcpy( newMem, _mem,
sizeof(T)*_size );
311 if ( _mem != _pool ) {
315 _allocated = newAllocated;
320 T _pool[INITIAL_SIZE];
338 virtual void Free(
void* ) = 0;
346template<
int ITEM_SIZE >
350 MemPoolT() : _blockPtrs(), _root(0), _currentAllocs(0), _nAllocs(0), _maxAllocs(0), _nUntracked(0) {}
357 while( !_blockPtrs.
Empty()) {
358 Block* lastBlock = _blockPtrs.
Pop();
372 return _currentAllocs;
378 Block* block =
new Block();
379 _blockPtrs.
Push( block );
381 Item* blockItems = block->items;
383 blockItems[i].next = &(blockItems[i + 1]);
388 Item*
const result = _root;
393 if ( _currentAllocs > _maxAllocs ) {
394 _maxAllocs = _currentAllocs;
401 virtual void Free(
void* mem ) {
406 Item* item =
static_cast<Item*
>( mem );
408 memset( item, 0xfe,
sizeof( *item ) );
414 printf(
"Mempool %s watermark=%d [%dk] current=%d size=%d nAlloc=%d blocks=%d\n",
415 name, _maxAllocs, _maxAllocs * ITEM_SIZE / 1024, _currentAllocs,
416 ITEM_SIZE, _nAllocs, _blockPtrs.
Size() );
446 char itemData[ITEM_SIZE];
451 DynArray< Block*, 10 > _blockPtrs;
557 while( IsWhiteSpace(*p) ) {
558 if (curLineNumPtr && *p ==
'\n') {
567 return const_cast<char*
>( SkipWhiteSpace(
const_cast<const char*
>(p), curLineNumPtr ) );
573 return !IsUTF8Continuation(p) && isspace(
static_cast<unsigned char>(p) );
581 if ( isalpha( ch ) ) {
584 return ch ==
':' || ch ==
'_';
588 return IsNameStartChar( ch )
595 p = SkipWhiteSpace(p, 0);
596 return p && *p ==
'0' && ( *(p + 1) ==
'x' || *(p + 1) ==
'X');
599 inline static bool StringEqual(
const char* p,
const char* q,
int nChar=INT_MAX ) {
606 return strncmp( p, q, nChar ) == 0;
599 inline static bool StringEqual(
const char* p,
const char* q,
int nChar=INT_MAX ) {
…}
610 return ( p & 0x80 ) != 0;
613 static const char* ReadBOM(
const char* p,
bool* hasBOM );
616 static const char* GetCharacterRef(
const char* p,
char* value,
int* length );
617 static void ConvertUTF32ToUTF8(
unsigned long input,
char* output,
int* length );
620 static void ToStr(
int v,
char* buffer,
int bufferSize );
621 static void ToStr(
unsigned v,
char* buffer,
int bufferSize );
622 static void ToStr(
bool v,
char* buffer,
int bufferSize );
623 static void ToStr(
float v,
char* buffer,
int bufferSize );
624 static void ToStr(
double v,
char* buffer,
int bufferSize );
625 static void ToStr(int64_t v,
char* buffer,
int bufferSize);
626 static void ToStr(uint64_t v,
char* buffer,
int bufferSize);
629 static bool ToInt(
const char* str,
int* value );
630 static bool ToUnsigned(
const char* str,
unsigned* value );
631 static bool ToBool(
const char* str,
bool* value );
632 static bool ToFloat(
const char* str,
float* value );
633 static bool ToDouble(
const char* str,
double* value );
634 static bool ToInt64(
const char* str, int64_t* value);
635 static bool ToUnsigned64(
const char* str, uint64_t* value);
641 static void SetBoolSerialization(
const char* writeTrue,
const char* writeFalse);
644 static const char* writeBoolTrue;
645 static const char* writeBoolFalse;
744 const char* Value()
const;
749 void SetValue(
const char* val,
bool staticMem=
false );
780 const XMLElement* FirstChildElement(
const char* name = 0 )
const;
783 return const_cast<XMLElement*
>(
const_cast<const XMLNode*
>(
this)->FirstChildElement( name ));
798 const XMLElement* LastChildElement(
const char* name = 0 )
const;
801 return const_cast<XMLElement*
>(
const_cast<const XMLNode*
>(
this)->LastChildElement(name) );
814 const XMLElement* PreviousSiblingElement(
const char* name = 0 )
const ;
817 return const_cast<XMLElement*
>(
const_cast<const XMLNode*
>(
this)->PreviousSiblingElement( name ) );
830 const XMLElement* NextSiblingElement(
const char* name = 0 )
const;
833 return const_cast<XMLElement*
>(
const_cast<const XMLNode*
>(
this)->NextSiblingElement( name ) );
846 return InsertEndChild( addThis );
869 void DeleteChildren();
874 void DeleteChild(
XMLNode* node );
952 virtual char* ParseDeep(
char* p,
StrPair* parentEndTag,
int* curLineNumPtr);
970 static void DeleteNode(
XMLNode* node );
971 void InsertChildPreamble(
XMLNode* insertThis )
const;
972 const XMLElement* ToElementWithName(
const char* name )
const;
995 virtual bool Accept(
XMLVisitor* visitor )
const;
1014 virtual bool ShallowEqual(
const XMLNode* compare )
const;
1020 char* ParseDeep(
char* p,
StrPair* parentEndTag,
int* curLineNumPtr );
1042 virtual bool Accept(
XMLVisitor* visitor )
const;
1045 virtual bool ShallowEqual(
const XMLNode* compare )
const;
1051 char* ParseDeep(
char* p,
StrPair* parentEndTag,
int* curLineNumPtr);
1081 virtual bool Accept(
XMLVisitor* visitor )
const;
1084 virtual bool ShallowEqual(
const XMLNode* compare )
const;
1090 char* ParseDeep(
char* p,
StrPair* parentEndTag,
int* curLineNumPtr );
1116 virtual bool Accept(
XMLVisitor* visitor )
const;
1119 virtual bool ShallowEqual(
const XMLNode* compare )
const;
1125 char* ParseDeep(
char* p,
StrPair* parentEndTag,
int* curLineNumPtr );
1145 const char* Name()
const;
1148 const char* Value()
const;
1170 QueryInt64Value(&i);
1176 QueryUnsigned64Value(&i);
1183 QueryUnsignedValue( &i );
1189 QueryBoolValue( &b );
1195 QueryDoubleValue( &d );
1201 QueryFloatValue( &f );
1209 XMLError QueryIntValue(
int* value )
const;
1211 XMLError QueryUnsignedValue(
unsigned int* value )
const;
1213 XMLError QueryInt64Value(int64_t* value)
const;
1215 XMLError QueryUnsigned64Value(uint64_t* value)
const;
1217 XMLError QueryBoolValue(
bool* value )
const;
1219 XMLError QueryDoubleValue(
double* value )
const;
1221 XMLError QueryFloatValue(
float* value )
const;
1224 void SetAttribute(
const char* value );
1226 void SetAttribute(
int value );
1228 void SetAttribute(
unsigned value );
1230 void SetAttribute(int64_t value);
1232 void SetAttribute(uint64_t value);
1234 void SetAttribute(
bool value );
1236 void SetAttribute(
double value );
1238 void SetAttribute(
float value );
1241 enum { BUF_SIZE = 200 };
1243 XMLAttribute() : _name(), _value(),_parseLineNum( 0 ), _next( 0 ), _memPool( 0 ) {}
1244 virtual ~XMLAttribute() {}
1246 XMLAttribute(
const XMLAttribute& );
1247 void operator=(
const XMLAttribute& );
1248 void SetName(
const char* name );
1250 char* ParseDeep(
char* p,
bool processEntities,
int* curLineNumPtr );
1252 mutable StrPair _name;
1253 mutable StrPair _value;
1255 XMLAttribute* _next;
1273 void SetName(
const char* str,
bool staticMem=
false ) {
1274 SetValue( str, staticMem );
1273 void SetName(
const char* str,
bool staticMem=
false ) {
…}
1283 virtual bool Accept(
XMLVisitor* visitor )
const;
1308 const char* Attribute(
const char* name,
const char* value=0 )
const;
1316 int IntAttribute(
const char* name,
int defaultValue = 0)
const;
1318 unsigned UnsignedAttribute(
const char* name,
unsigned defaultValue = 0)
const;
1320 int64_t Int64Attribute(
const char* name, int64_t defaultValue = 0)
const;
1322 uint64_t Unsigned64Attribute(
const char* name, uint64_t defaultValue = 0)
const;
1324 bool BoolAttribute(
const char* name,
bool defaultValue =
false)
const;
1326 double DoubleAttribute(
const char* name,
double defaultValue = 0)
const;
1328 float FloatAttribute(
const char* name,
float defaultValue = 0)
const;
1409 *value = a->
Value();
1433 return QueryIntAttribute( name, value );
1437 return QueryUnsignedAttribute( name, value );
1441 return QueryInt64Attribute(name, value);
1445 return QueryUnsigned64Attribute(name, value);
1449 return QueryBoolAttribute( name, value );
1453 return QueryDoubleAttribute( name, value );
1457 return QueryFloatAttribute( name, value );
1461 return QueryStringAttribute(name, value);
1511 void DeleteAttribute(
const char* name );
1515 return _rootAttribute;
1518 const XMLAttribute* FindAttribute(
const char* name )
const;
1548 const char* GetText()
const;
1584 void SetText(
const char* inText );
1586 void SetText(
int value );
1588 void SetText(
unsigned value );
1590 void SetText(int64_t value);
1592 void SetText(uint64_t value);
1594 void SetText(
bool value );
1596 void SetText(
double value );
1598 void SetText(
float value );
1626 XMLError QueryIntText(
int* ival )
const;
1628 XMLError QueryUnsignedText(
unsigned* uval )
const;
1630 XMLError QueryInt64Text(int64_t* uval)
const;
1632 XMLError QueryUnsigned64Text(uint64_t* uval)
const;
1634 XMLError QueryBoolText(
bool* bval )
const;
1636 XMLError QueryDoubleText(
double* dval )
const;
1638 XMLError QueryFloatText(
float* fval )
const;
1640 int IntText(
int defaultValue = 0)
const;
1643 unsigned UnsignedText(
unsigned defaultValue = 0)
const;
1645 int64_t Int64Text(int64_t defaultValue = 0)
const;
1647 uint64_t Unsigned64Text(uint64_t defaultValue = 0)
const;
1649 bool BoolText(
bool defaultValue =
false)
const;
1651 double DoubleText(
double defaultValue = 0)
const;
1653 float FloatText(
float defaultValue = 0)
const;
1659 XMLElement* InsertNewChildElement(
const char* name);
1661 XMLComment* InsertNewComment(
const char* comment);
1663 XMLText* InsertNewText(
const char* text);
1667 XMLUnknown* InsertNewUnknown(
const char* text);
1677 return _closingType;
1680 virtual bool ShallowEqual(
const XMLNode* compare )
const;
1683 char* ParseDeep(
char* p,
StrPair* parentEndTag,
int* curLineNumPtr );
1691 XMLAttribute* FindOrCreateAttribute(
const char* name );
1692 char* ParseAttributes(
char* p,
int* curLineNumPtr );
1693 static void DeleteAttribute(
XMLAttribute* attribute );
1696 enum { BUF_SIZE = 200 };
1697 ElementClosingType _closingType;
1701 XMLAttribute* _rootAttribute;
1750 XMLError Parse(
const char* xml,
size_t nBytes=
static_cast<size_t>(-1) );
1757 XMLError LoadFile(
const char* filename );
1777 XMLError SaveFile(
const char* filename,
bool compact =
false );
1786 XMLError SaveFile( FILE* fp,
bool compact =
false );
1789 return _processEntities;
1792 return _whitespaceMode;
1811 return FirstChildElement();
1814 return FirstChildElement();
1832 virtual bool Accept(
XMLVisitor* visitor )
const;
1845 XMLComment* NewComment(
const char* comment );
1851 XMLText* NewText(
const char* text );
1875 void DeleteNode(
XMLNode* node );
1888 const char* ErrorName()
const;
1889 static const char* ErrorIDToName(
XMLError errorID);
1894 const char* ErrorStr()
const;
1897 void PrintError()
const;
1902 return _errorLineNum;
1918 char* Identify(
char* p,
XMLNode** node );
1921 void MarkInUse(
const XMLNode*
const);
1935 bool _processEntities;
1941 int _parseCurLineNum;
1960 void SetError(
XMLError error,
int lineNum,
const char* format, ... );
1965 class DepthTracker {
1968 this->_document = document;
1969 document->PushDepth();
1972 _document->PopDepth();
1975 XMLDocument * _document;
1980 template<
class NodeType,
int PoolElementSize>
1981 NodeType* CreateUnlinkedNode( MemPoolT<PoolElementSize>& pool );
1984template<
class NodeType,
int PoolElementSize>
1985inline NodeType* XMLDocument::CreateUnlinkedNode( MemPoolT<PoolElementSize>& pool )
1987 TIXMLASSERT(
sizeof( NodeType ) == PoolElementSize );
1988 TIXMLASSERT(
sizeof( NodeType ) == pool.ItemSize() );
1989 NodeType* returnNode =
new (pool.Alloc()) NodeType(
this );
1991 returnNode->_memPool = &pool;
1993 _unlinked.
Push(returnNode);
2072 return XMLHandle( _node ? _node->FirstChild() : 0 );
2076 return XMLHandle( _node ? _node->FirstChildElement( name ) : 0 );
2080 return XMLHandle( _node ? _node->LastChild() : 0 );
2084 return XMLHandle( _node ? _node->LastChildElement( name ) : 0 );
2088 return XMLHandle( _node ? _node->PreviousSibling() : 0 );
2092 return XMLHandle( _node ? _node->PreviousSiblingElement( name ) : 0 );
2096 return XMLHandle( _node ? _node->NextSibling() : 0 );
2100 return XMLHandle( _node ? _node->NextSiblingElement( name ) : 0 );
2109 return ( _node ? _node->ToElement() : 0 );
2113 return ( _node ? _node->ToText() : 0 );
2117 return ( _node ? _node->ToUnknown() : 0 );
2121 return ( _node ? _node->ToDeclaration() : 0 );
2152 return XMLConstHandle( _node ? _node->FirstChildElement( name ) : 0 );
2158 return XMLConstHandle( _node ? _node->LastChildElement( name ) : 0 );
2164 return XMLConstHandle( _node ? _node->PreviousSiblingElement( name ) : 0 );
2170 return XMLConstHandle( _node ? _node->NextSiblingElement( name ) : 0 );
2178 return ( _node ? _node->ToElement() : 0 );
2181 return ( _node ? _node->ToText() : 0 );
2184 return ( _node ? _node->ToUnknown() : 0 );
2187 return ( _node ? _node->ToDeclaration() : 0 );
2246 XMLPrinter( FILE* file=0,
bool compact =
false,
int depth = 0 );
2250 void PushHeader(
bool writeBOM,
bool writeDeclaration );
2254 void OpenElement(
const char* name,
bool compactMode=
false );
2256 void PushAttribute(
const char* name,
const char* value );
2257 void PushAttribute(
const char* name,
int value );
2258 void PushAttribute(
const char* name,
unsigned value );
2259 void PushAttribute(
const char* name, int64_t value );
2260 void PushAttribute(
const char* name, uint64_t value );
2261 void PushAttribute(
const char* name,
bool value );
2262 void PushAttribute(
const char* name,
double value );
2264 virtual void CloseElement(
bool compactMode=
false );
2267 void PushText(
const char* text,
bool cdata=
false );
2269 void PushText(
int value );
2271 void PushText(
unsigned value );
2273 void PushText( int64_t value );
2275 void PushText( uint64_t value );
2277 void PushText(
bool value );
2279 void PushText(
float value );
2281 void PushText(
double value );
2284 void PushComment(
const char* comment );
2286 void PushDeclaration(
const char* value );
2287 void PushUnknown(
const char* value );
2295 virtual bool VisitExit(
const XMLElement& element );
2297 virtual bool Visit(
const XMLText& text );
2298 virtual bool Visit(
const XMLComment& comment );
2300 virtual bool Visit(
const XMLUnknown& unknown );
2307 return _buffer.Mem();
2315 return _buffer.Size();
2324 _firstElement = resetToFirstElement;
2333 virtual void PrintSpace(
int depth );
2334 virtual void Print(
const char* format, ... );
2335 virtual void Write(
const char* data,
size_t size );
2336 virtual void Putc(
char ch );
2338 inline void Write(
const char* data) {
Write(data, strlen(data)); }
2340 void SealElementIfJustOpened();
2349 void PrepareForNewNode(
bool compactMode );
2350 void PrintString(
const char*,
bool restrictedEntitySet );
2356 bool _processEntities;
2363 bool _entityFlag[ENTITY_RANGE];
2364 bool _restrictedEntityFlag[ENTITY_RANGE];
2376#if defined(_MSC_VER)
2377# pragma warning(pop)
Definition tinyxml2.h:207
bool Empty() const
Definition tinyxml2.h:253
T Pop()
Definition tinyxml2.h:242
const T & PeekTop() const
Definition tinyxml2.h:267
T & operator[](int i)
Definition tinyxml2.h:257
~DynArray()
Definition tinyxml2.h:216
T * Mem()
Definition tinyxml2.h:294
int Size() const
Definition tinyxml2.h:272
const T & operator[](int i) const
Definition tinyxml2.h:262
const T * Mem() const
Definition tinyxml2.h:289
int Capacity() const
Definition tinyxml2.h:277
void SwapRemove(int i)
Definition tinyxml2.h:282
DynArray()
Definition tinyxml2.h:209
void PopArr(int count)
Definition tinyxml2.h:248
T * PushArr(int count)
Definition tinyxml2.h:233
void Push(T t)
Definition tinyxml2.h:226
void Clear()
Definition tinyxml2.h:222
Definition tinyxml2.h:331
virtual int ItemSize() const =0
virtual void Free(void *)=0
MemPool()
Definition tinyxml2.h:333
virtual void SetTracked()=0
virtual ~MemPool()
Definition tinyxml2.h:334
Definition tinyxml2.h:348
@ ITEMS_PER_BLOCK
Definition tinyxml2.h:438
void Clear()
Definition tinyxml2.h:355
virtual void * Alloc()
Definition tinyxml2.h:375
int Untracked() const
Definition tinyxml2.h:423
virtual void Free(void *mem)
Definition tinyxml2.h:401
int CurrentAllocs() const
Definition tinyxml2.h:371
void Trace(const char *name)
Definition tinyxml2.h:413
virtual int ItemSize() const
Definition tinyxml2.h:368
~MemPoolT()
Definition tinyxml2.h:351
MemPoolT()
Definition tinyxml2.h:350
void SetTracked()
Definition tinyxml2.h:419
Definition tinyxml2.h:137
void SetInternedStr(const char *str)
Definition tinyxml2.h:170
void Set(char *start, char *end, int flags)
Definition tinyxml2.h:155
StrPair()
Definition tinyxml2.h:152
Mode
Definition tinyxml2.h:139
bool Empty() const
Definition tinyxml2.h:166
Definition tinyxml2.h:1141
int GetLineNum() const
Gets the line number the attribute is in, if the document was parsed from a file.
Definition tinyxml2.h:1151
XMLError QueryFloatValue(float *value) const
See QueryIntValue.
Definition tinyxml2.cpp:1497
unsigned UnsignedValue() const
Query as an unsigned integer. See IntValue()
Definition tinyxml2.h:1181
float FloatValue() const
Query as a float. See IntValue()
Definition tinyxml2.h:1199
XMLError QueryDoubleValue(double *value) const
See QueryIntValue.
Definition tinyxml2.cpp:1506
void SetAttribute(const char *value)
Set the attribute to a string value.
Definition tinyxml2.cpp:1515
XMLError QueryUnsignedValue(unsigned int *value) const
See QueryIntValue.
Definition tinyxml2.cpp:1461
double DoubleValue() const
Query as a double. See IntValue()
Definition tinyxml2.h:1193
XMLError QueryInt64Value(int64_t *value) const
See QueryIntValue.
Definition tinyxml2.cpp:1470
XMLError QueryBoolValue(bool *value) const
See QueryIntValue.
Definition tinyxml2.cpp:1488
XMLError QueryIntValue(int *value) const
Definition tinyxml2.cpp:1452
int64_t Int64Value() const
Definition tinyxml2.h:1168
bool BoolValue() const
Query as a boolean. See IntValue()
Definition tinyxml2.h:1187
const XMLAttribute * Next() const
The next attribute in the list.
Definition tinyxml2.h:1154
const char * Value() const
The value of the attribute.
Definition tinyxml2.cpp:1413
uint64_t Unsigned64Value() const
Definition tinyxml2.h:1174
int IntValue() const
Definition tinyxml2.h:1162
XMLError QueryUnsigned64Value(uint64_t *value) const
See QueryIntValue.
Definition tinyxml2.cpp:1479
Definition tinyxml2.h:2134
XMLConstHandle(const XMLNode *node)
Definition tinyxml2.h:2136
const XMLText * ToText() const
Definition tinyxml2.h:2180
XMLConstHandle & operator=(const XMLConstHandle &ref)
Definition tinyxml2.h:2143
const XMLConstHandle NextSiblingElement(const char *name=0) const
Definition tinyxml2.h:2169
const XMLElement * ToElement() const
Definition tinyxml2.h:2177
XMLConstHandle(const XMLConstHandle &ref)
Definition tinyxml2.h:2140
const XMLUnknown * ToUnknown() const
Definition tinyxml2.h:2183
const XMLDeclaration * ToDeclaration() const
Definition tinyxml2.h:2186
XMLConstHandle(const XMLNode &node)
Definition tinyxml2.h:2138
const XMLConstHandle LastChild() const
Definition tinyxml2.h:2154
const XMLConstHandle LastChildElement(const char *name=0) const
Definition tinyxml2.h:2157
const XMLConstHandle FirstChildElement(const char *name=0) const
Definition tinyxml2.h:2151
const XMLNode * ToNode() const
Definition tinyxml2.h:2174
const XMLConstHandle PreviousSibling() const
Definition tinyxml2.h:2160
const XMLConstHandle NextSibling() const
Definition tinyxml2.h:2166
const XMLConstHandle FirstChild() const
Definition tinyxml2.h:2148
const XMLConstHandle PreviousSiblingElement(const char *name=0) const
Definition tinyxml2.h:2163
Definition tinyxml2.h:1071
virtual const XMLDeclaration * ToDeclaration() const
Definition tinyxml2.h:1077
virtual XMLDeclaration * ToDeclaration()
Safely cast to a Declaration, or null.
Definition tinyxml2.h:1074
Definition tinyxml2.h:1717
XMLElement * RootElement()
Definition tinyxml2.h:1810
void SetBOM(bool useBOM)
Definition tinyxml2.h:1803
bool HasBOM() const
Definition tinyxml2.h:1798
bool Error() const
Return true if there was an error parsing the document.
Definition tinyxml2.h:1881
const XMLElement * RootElement() const
Definition tinyxml2.h:1813
bool ProcessEntities() const
Definition tinyxml2.h:1788
int ErrorLineNum() const
Return the line where the error occurred, or zero if unknown.
Definition tinyxml2.h:1900
virtual bool ShallowEqual(const XMLNode *) const
Definition tinyxml2.h:1926
Whitespace WhitespaceMode() const
Definition tinyxml2.h:1791
virtual XMLDocument * ToDocument()
Safely cast to a Document, or null.
Definition tinyxml2.h:1731
virtual const XMLDocument * ToDocument() const
Definition tinyxml2.h:1735
virtual XMLNode * ShallowClone(XMLDocument *) const
Definition tinyxml2.h:1923
XMLError ErrorID() const
Return the errorID.
Definition tinyxml2.h:1885
Definition tinyxml2.h:1265
void SetAttribute(const char *name, const char *value)
Sets the named attribute to value.
Definition tinyxml2.h:1465
XMLError QueryUnsigned64Attribute(const char *name, uint64_t *value) const
See QueryIntAttribute()
Definition tinyxml2.h:1370
XMLError QueryBoolAttribute(const char *name, bool *value) const
See QueryIntAttribute()
Definition tinyxml2.h:1379
XMLError QueryAttribute(const char *name, bool *value) const
Definition tinyxml2.h:1448
void SetAttribute(const char *name, double value)
Sets the named attribute to value.
Definition tinyxml2.h:1498
XMLError QueryUnsignedAttribute(const char *name, unsigned int *value) const
See QueryIntAttribute()
Definition tinyxml2.h:1352
XMLError QueryAttribute(const char *name, unsigned int *value) const
Definition tinyxml2.h:1436
XMLError QueryAttribute(const char *name, int64_t *value) const
Definition tinyxml2.h:1440
const XMLAttribute * FirstAttribute() const
Return the first attribute in the list.
Definition tinyxml2.h:1514
XMLError QueryAttribute(const char *name, double *value) const
Definition tinyxml2.h:1452
void SetAttribute(const char *name, float value)
Sets the named attribute to value.
Definition tinyxml2.h:1503
XMLError QueryAttribute(const char *name, int *value) const
Definition tinyxml2.h:1432
XMLError QueryDoubleAttribute(const char *name, double *value) const
See QueryIntAttribute()
Definition tinyxml2.h:1387
ElementClosingType ClosingType() const
Definition tinyxml2.h:1676
XMLError QueryInt64Attribute(const char *name, int64_t *value) const
See QueryIntAttribute()
Definition tinyxml2.h:1361
XMLError QueryIntAttribute(const char *name, int *value) const
Definition tinyxml2.h:1343
void SetName(const char *str, bool staticMem=false)
Set the name of the element.
Definition tinyxml2.h:1273
virtual const XMLElement * ToElement() const
Definition tinyxml2.h:1280
void SetAttribute(const char *name, bool value)
Sets the named attribute to value.
Definition tinyxml2.h:1493
void SetAttribute(const char *name, int value)
Sets the named attribute to value.
Definition tinyxml2.h:1470
void SetAttribute(const char *name, int64_t value)
Sets the named attribute to value.
Definition tinyxml2.h:1481
ElementClosingType
Definition tinyxml2.h:1671
@ OPEN
Definition tinyxml2.h:1672
@ CLOSED
Definition tinyxml2.h:1673
virtual XMLElement * ToElement()
Safely cast to an Element, or null.
Definition tinyxml2.h:1277
const char * Name() const
Get the name of an element (which is the Value() of the node.)
Definition tinyxml2.h:1269
XMLError QueryAttribute(const char *name, float *value) const
Definition tinyxml2.h:1456
XMLError QueryFloatAttribute(const char *name, float *value) const
See QueryIntAttribute()
Definition tinyxml2.h:1395
XMLError QueryAttribute(const char *name, uint64_t *value) const
Definition tinyxml2.h:1444
void SetAttribute(const char *name, uint64_t value)
Sets the named attribute to value.
Definition tinyxml2.h:1487
XMLError QueryStringAttribute(const char *name, const char **value) const
See QueryIntAttribute()
Definition tinyxml2.h:1404
void SetAttribute(const char *name, unsigned value)
Sets the named attribute to value.
Definition tinyxml2.h:1475
XMLError QueryAttribute(const char *name, const char **value) const
Definition tinyxml2.h:1460
Definition tinyxml2.h:2053
XMLHandle PreviousSibling()
Get the previous sibling of this handle.
Definition tinyxml2.h:2087
XMLHandle LastChildElement(const char *name=0)
Get the last child element of this handle.
Definition tinyxml2.h:2083
XMLHandle FirstChild()
Get the first child of this handle.
Definition tinyxml2.h:2071
XMLNode * ToNode()
Safe cast to XMLNode. This can return null.
Definition tinyxml2.h:2104
XMLHandle FirstChildElement(const char *name=0)
Get the first child element of this handle.
Definition tinyxml2.h:2075
XMLHandle PreviousSiblingElement(const char *name=0)
Get the previous sibling element of this handle.
Definition tinyxml2.h:2091
XMLDeclaration * ToDeclaration()
Safe cast to XMLDeclaration. This can return null.
Definition tinyxml2.h:2120
XMLHandle(XMLNode *node)
Create a handle from any node (at any depth of the tree.) This can be a null pointer.
Definition tinyxml2.h:2056
XMLHandle LastChild()
Get the last child of this handle.
Definition tinyxml2.h:2079
XMLHandle & operator=(const XMLHandle &ref)
Assignment.
Definition tinyxml2.h:2065
XMLHandle(XMLNode &node)
Create a handle from a node.
Definition tinyxml2.h:2059
XMLHandle NextSibling()
Get the next sibling of this handle.
Definition tinyxml2.h:2095
XMLElement * ToElement()
Safe cast to XMLElement. This can return null.
Definition tinyxml2.h:2108
XMLText * ToText()
Safe cast to XMLText. This can return null.
Definition tinyxml2.h:2112
XMLUnknown * ToUnknown()
Safe cast to XMLUnknown. This can return null.
Definition tinyxml2.h:2116
XMLHandle NextSiblingElement(const char *name=0)
Get the next sibling element of this handle.
Definition tinyxml2.h:2099
XMLHandle(const XMLHandle &ref)
Copy constructor.
Definition tinyxml2.h:2062
Definition tinyxml2.h:675
void SetUserData(void *userData)
Definition tinyxml2.h:939
virtual const XMLText * ToText() const
Definition tinyxml2.h:719
XMLNode * NextSibling()
Definition tinyxml2.h:825
XMLNode * _lastChild
Definition tinyxml2.h:960
virtual XMLText * ToText()
Safely cast to Text, or null.
Definition tinyxml2.h:696
virtual XMLDeclaration * ToDeclaration()
Safely cast to a Declaration, or null.
Definition tinyxml2.h:708
XMLNode * _parent
Definition tinyxml2.h:955
void * GetUserData() const
Definition tinyxml2.h:946
XMLNode * _next
Definition tinyxml2.h:963
XMLNode * FirstChild()
Definition tinyxml2.h:773
StrPair _value
Definition tinyxml2.h:956
XMLElement * FirstChildElement(const char *name=0)
Definition tinyxml2.h:782
XMLDocument * GetDocument()
Get the XMLDocument that owns this XMLNode.
Definition tinyxml2.h:686
XMLElement * LastChildElement(const char *name=0)
Definition tinyxml2.h:800
const XMLNode * Parent() const
Get the parent of this node on the DOM.
Definition tinyxml2.h:755
XMLNode * LastChild()
Definition tinyxml2.h:791
XMLNode * PreviousSibling()
Definition tinyxml2.h:809
virtual XMLComment * ToComment()
Safely cast to a Comment, or null.
Definition tinyxml2.h:700
virtual XMLDocument * ToDocument()
Safely cast to a Document, or null.
Definition tinyxml2.h:704
const XMLNode * LastChild() const
Get the last child node, or null if none exists.
Definition tinyxml2.h:787
const XMLDocument * GetDocument() const
Get the XMLDocument that owns this XMLNode.
Definition tinyxml2.h:681
virtual const XMLElement * ToElement() const
Definition tinyxml2.h:716
virtual bool ShallowEqual(const XMLNode *compare) const =0
virtual bool Accept(XMLVisitor *visitor) const =0
XMLElement * NextSiblingElement(const char *name=0)
Definition tinyxml2.h:832
XMLDocument * _document
Definition tinyxml2.h:954
virtual XMLNode * ShallowClone(XMLDocument *document) const =0
const XMLNode * PreviousSibling() const
Get the previous (left) sibling node of this node.
Definition tinyxml2.h:805
virtual const XMLDeclaration * ToDeclaration() const
Definition tinyxml2.h:728
virtual XMLElement * ToElement()
Safely cast to an Element, or null.
Definition tinyxml2.h:692
XMLNode * _prev
Definition tinyxml2.h:962
int GetLineNum() const
Gets the line number the node is in, if the document was parsed from a file.
Definition tinyxml2.h:752
XMLNode * _firstChild
Definition tinyxml2.h:959
virtual XMLUnknown * ToUnknown()
Safely cast to an Unknown, or null.
Definition tinyxml2.h:712
int _parseLineNum
Definition tinyxml2.h:957
virtual const XMLUnknown * ToUnknown() const
Definition tinyxml2.h:731
const XMLNode * FirstChild() const
Get the first child node, or null if none exists.
Definition tinyxml2.h:769
XMLElement * PreviousSiblingElement(const char *name=0)
Definition tinyxml2.h:816
void * _userData
Definition tinyxml2.h:965
bool NoChildren() const
Returns true if this node has no children.
Definition tinyxml2.h:764
virtual const XMLDocument * ToDocument() const
Definition tinyxml2.h:725
XMLNode * Parent()
Definition tinyxml2.h:759
XMLNode * LinkEndChild(XMLNode *addThis)
Definition tinyxml2.h:845
virtual const XMLComment * ToComment() const
Definition tinyxml2.h:722
const XMLNode * NextSibling() const
Get the next (right) sibling node of this node.
Definition tinyxml2.h:821
Definition tinyxml2.h:2238
virtual bool VisitExit(const XMLDocument &)
Visit a document.
Definition tinyxml2.h:2290
int CStrSize() const
Definition tinyxml2.h:2314
virtual bool CompactMode(const XMLElement &)
Definition tinyxml2.h:2328
void Write(const char *data)
Definition tinyxml2.h:2338
void ClearBuffer(bool resetToFirstElement=true)
Definition tinyxml2.h:2321
DynArray< const char *, 10 > _stack
Definition tinyxml2.h:2342
const char * CStr() const
Definition tinyxml2.h:2306
bool _elementJustOpened
Definition tinyxml2.h:2341
virtual ~XMLPrinter()
Definition tinyxml2.h:2247
Definition tinyxml2.h:992
virtual const XMLText * ToText() const
Definition tinyxml2.h:1000
virtual XMLText * ToText()
Safely cast to Text, or null.
Definition tinyxml2.h:997
bool CData() const
Returns true if this is a CDATA text element.
Definition tinyxml2.h:1009
void SetCData(bool isCData)
Declare whether this should be CDATA or standard text.
Definition tinyxml2.h:1005
XMLText(XMLDocument *doc)
Definition tinyxml2.h:1017
virtual ~XMLText()
Definition tinyxml2.h:1018
Definition tinyxml2.h:1106
virtual XMLUnknown * ToUnknown()
Safely cast to an Unknown, or null.
Definition tinyxml2.h:1109
virtual const XMLUnknown * ToUnknown() const
Definition tinyxml2.h:1112
Definition tinyxml2.h:552
static bool IsNameChar(unsigned char ch)
Definition tinyxml2.h:587
static bool IsPrefixHex(const char *p)
Definition tinyxml2.h:594
static bool IsWhiteSpace(char p)
Definition tinyxml2.h:572
static bool IsUTF8Continuation(const char p)
Definition tinyxml2.h:609
static bool IsNameStartChar(unsigned char ch)
Definition tinyxml2.h:576
static const char * SkipWhiteSpace(const char *p, int *curLineNumPtr)
Definition tinyxml2.h:554
static bool StringEqual(const char *p, const char *q, int nChar=INT_MAX)
Definition tinyxml2.h:599
static char * SkipWhiteSpace(char *const p, int *curLineNumPtr)
Definition tinyxml2.h:566
Definition tinyxml2.h:482
virtual bool Visit(const XMLUnknown &)
Visit an unknown node.
Definition tinyxml2.h:517
virtual bool VisitExit(const XMLDocument &)
Visit a document.
Definition tinyxml2.h:491
virtual ~XMLVisitor()
Definition tinyxml2.h:484
virtual bool VisitExit(const XMLElement &)
Visit an element.
Definition tinyxml2.h:500
virtual bool VisitEnter(const XMLDocument &)
Visit a document.
Definition tinyxml2.h:487
virtual bool Visit(const XMLComment &)
Visit a comment node.
Definition tinyxml2.h:513
virtual bool Visit(const XMLDeclaration &)
Visit a declaration.
Definition tinyxml2.h:505
virtual bool Visit(const XMLText &)
Visit a text node.
Definition tinyxml2.h:509
virtual bool VisitEnter(const XMLElement &, const XMLAttribute *)
Visit an element.
Definition tinyxml2.h:496
Definition tinyxml2.cpp:142
XMLError
Definition tinyxml2.h:523
@ XML_ERROR_MISMATCHED_ELEMENT
Definition tinyxml2.h:538
@ XML_ELEMENT_DEPTH_EXCEEDED
Definition tinyxml2.h:542
@ XML_ERROR_EMPTY_DOCUMENT
Definition tinyxml2.h:537
@ XML_SUCCESS
Definition tinyxml2.h:524
@ XML_ERROR_PARSING_ATTRIBUTE
Definition tinyxml2.h:531
@ XML_ERROR_FILE_NOT_FOUND
Definition tinyxml2.h:527
@ XML_ERROR_PARSING_TEXT
Definition tinyxml2.h:532
@ XML_ERROR_PARSING_COMMENT
Definition tinyxml2.h:534
@ XML_NO_TEXT_NODE
Definition tinyxml2.h:541
@ XML_ERROR_FILE_READ_ERROR
Definition tinyxml2.h:529
@ XML_ERROR_PARSING_UNKNOWN
Definition tinyxml2.h:536
@ XML_ERROR_PARSING_CDATA
Definition tinyxml2.h:533
@ XML_ERROR_COUNT
Definition tinyxml2.h:544
@ XML_NO_ATTRIBUTE
Definition tinyxml2.h:525
@ XML_ERROR_PARSING_DECLARATION
Definition tinyxml2.h:535
@ XML_WRONG_ATTRIBUTE_TYPE
Definition tinyxml2.h:526
@ XML_ERROR_PARSING
Definition tinyxml2.h:539
@ XML_ERROR_PARSING_ELEMENT
Definition tinyxml2.h:530
@ XML_ERROR_FILE_COULD_NOT_BE_OPENED
Definition tinyxml2.h:528
@ XML_CAN_NOT_CONVERT_TEXT
Definition tinyxml2.h:540
Whitespace
Definition tinyxml2.h:1705
@ PRESERVE_WHITESPACE
Definition tinyxml2.h:1706
@ COLLAPSE_WHITESPACE
Definition tinyxml2.h:1707
#define TIXMLASSERT(x)
Definition tinyxml2.h:95
#define TINYXML2_LIB
Definition tinyxml2.h:78