Virtual Belgium  2.0
A micro-simulation platform for the Belgian population
 All Classes Namespaces Files Functions Variables Typedefs Enumerator Friends Macros Pages
tinyxml2.hpp
Go to the documentation of this file.
1 /*
2 Original code by Lee Thomason (www.grinninglizard.com)
3  - modified by Johan Barthelemy.
4 
5  The modification allows the library to handle additional
6  data types such as double and long.
7 */
8 
9 #ifndef TINYXML2_INCLUDED
10 #define TINYXML2_INCLUDED
11 
12 #include <cctype>
13 #include <climits>
14 #include <cstdio>
15 #include <cstring>
16 #include <cstdarg>
17 #include <string>
18 
19 /*
20  gcc: g++ -Wall tinyxml2.cpp xmltest.cpp -o gccxmltest.exe
21 */
22 
23 #if defined( _DEBUG ) || defined( DEBUG ) || defined (__DEBUG__)
24  #ifndef DEBUG
25  #define DEBUG
26  #endif
27 #endif
28 
29 
30 #if defined(DEBUG)
31  #if defined(_MSC_VER)
32  #define TIXMLASSERT( x ) if ( !(x)) { __debugbreak(); } //if ( !(x)) WinDebugBreak()
33  #elif defined (ANDROID_NDK)
34  #include <android/log.h>
35  #define TIXMLASSERT( x ) if ( !(x)) { __android_log_assert( "assert", "grinliz", "ASSERT in '%s' at %d.", __FILE__, __LINE__ ); }
36  #else
37  #include <assert.h>
38  #define TIXMLASSERT assert
39  #endif
40 #else
41  #define TIXMLASSERT( x ) {}
42 #endif
43 
44 
45 #if defined(_MSC_VER) && (_MSC_VER >= 1400 )
46  // Microsoft visual studio, version 2005 and higher.
47  /*int _snprintf_s(
48  char *buffer,
49  size_t sizeOfBuffer,
50  size_t count,
51  const char *format [,
52  argument] ...
53  );*/
54  inline int TIXML_SNPRINTF( char* buffer, size_t size, const char* format, ... ) {
55  va_list va;
56  va_start( va, format );
57  int result = vsnprintf_s( buffer, size, _TRUNCATE, format, va );
58  va_end( va );
59  return result;
60  }
61  #define TIXML_SSCANF sscanf_s
62 #else
63  // GCC version 3 and higher
64  //#warning( "Using sn* functions." )
65  #define TIXML_SNPRINTF snprintf
66  #define TIXML_SSCANF sscanf
67 #endif
68 
69 static const int TIXML2_MAJOR_VERSION = 1;
70 static const int TIXML2_MINOR_VERSION = 0;
71 static const int TIXML2_PATCH_VERSION = 6;
72 
73 namespace tinyxml2
74 {
75 class XMLDocument;
76 class XMLElement;
77 class XMLAttribute;
78 class XMLComment;
79 class XMLNode;
80 class XMLText;
81 class XMLDeclaration;
82 class XMLUnknown;
83 
84 class XMLPrinter;
85 
86 /*
87  A class that wraps strings. Normally stores the start and end
88  pointers into the XML file itself, and will apply normalization
89  and entity translation if actually read. Can also store (and memory
90  manage) a traditional char[]
91 */
92 class StrPair
93 {
94 public:
95  enum {
98 
105  };
106 
107  StrPair() : flags( 0 ), start( 0 ), end( 0 ) {}
108  ~StrPair();
109 
110  void Set( char* _start, char* _end, int _flags ) {
111  reset();
112  this->start = _start; this->end = _end; this->flags = _flags | NEEDS_FLUSH;
113  }
114  const char* getStr();
115  bool Empty() const { return start == end; }
116 
117  void SetInternedStr( const char* str ) { reset(); this->start = const_cast<char*>(str); }
118  void setStr( const char* str, int flags=0 );
119 
120  char* parseText( char* in, const char* endTag, int strFlags );
121  char* parseName( char* in );
122 
123 
124 private:
125  void reset();
126 
127  enum {
128  NEEDS_FLUSH = 0x100,
129  NEEDS_DELETE = 0x200
130  };
131 
132  // After parsing, if *end != 0, it can be set to zero.
133  int flags;
134  char* start;
135  char* end;
136 };
137 
138 
139 /*
140  A dynamic array of Plain Old Data. Doesn't support constructors, etc.
141  Has a small initial memory pool, so that low or no usage will not
142  cause a call to new/delete
143 */
144 template <class T, int INIT>
145 class DynArray
146 {
147 public:
149  {
150  mem = pool;
151  allocated = INIT;
152  size = 0;
153  }
155  {
156  if ( mem != pool ) {
157  delete [] mem;
158  }
159  }
160  void Push( T t )
161  {
162  EnsureCapacity( size+1 );
163  mem[size++] = t;
164  }
165 
166  T* PushArr( int count )
167  {
168  EnsureCapacity( size+count );
169  T* ret = &mem[size];
170  size += count;
171  return ret;
172  }
173  T Pop() {
174  return mem[--size];
175  }
176  void PopArr( int count )
177  {
178  TIXMLASSERT( size >= count );
179  size -= count;
180  }
181 
182  bool Empty() const { return size == 0; }
183  T& operator[](int i) { TIXMLASSERT( i>= 0 && i < size ); return mem[i]; }
184  const T& operator[](int i) const { TIXMLASSERT( i>= 0 && i < size ); return mem[i]; }
185  int Size() const { return size; }
186  int Capacity() const { return allocated; }
187  const T* Mem() const { return mem; }
188  T* Mem() { return mem; }
189 
190 
191 private:
192  void EnsureCapacity( int cap ) {
193  if ( cap > allocated ) {
194  int newAllocated = cap * 2;
195  T* newMem = new T[newAllocated];
196  memcpy( newMem, mem, sizeof(T)*size ); // warning: not using constructors, only works for PODs
197  if ( mem != pool ) delete [] mem;
198  mem = newMem;
199  allocated = newAllocated;
200  }
201  }
202 
203  T* mem;
204  T pool[INIT];
205  int allocated; // objects allocated
206  int size; // number objects in use
207 };
208 
209 
210 /*
211  Parent virtual class of a pool for fast allocation
212  and deallocation of objects.
213 */
214 class MemPool
215 {
216 public:
217  MemPool() {}
218  virtual ~MemPool() {}
219 
220  virtual int ItemSize() const = 0;
221  virtual void* Alloc() = 0;
222  virtual void Free( void* ) = 0;
223 };
224 
225 
226 /*
227  Template child class to create pools of the correct type.
228 */
229 template< int SIZE >
230 class MemPoolT : public MemPool
231 {
232 public:
235  // Delete the blocks.
236  for( int i=0; i<blockPtrs.Size(); ++i ) {
237  delete blockPtrs[i];
238  }
239  }
240 
241  virtual int ItemSize() const { return SIZE; }
242  int CurrentAllocs() const { return currentAllocs; }
243 
244  virtual void* Alloc() {
245  if ( !root ) {
246  // Need a new block.
247  Block* block = new Block();
248  blockPtrs.Push( block );
249 
250  for( int i=0; i<COUNT-1; ++i ) {
251  block->chunk[i].next = &block->chunk[i+1];
252  }
253  block->chunk[COUNT-1].next = 0;
254  root = block->chunk;
255  }
256  void* result = root;
257  root = root->next;
258 
259  ++currentAllocs;
261  nAllocs++;
262  return result;
263  }
264  virtual void Free( void* mem ) {
265  if ( !mem ) return;
266  --currentAllocs;
267  Chunk* chunk = (Chunk*)mem;
268  memset( chunk, 0xfe, sizeof(Chunk) );
269  chunk->next = root;
270  root = chunk;
271  }
272  void Trace( const char* name ) {
273  printf( "Mempool %s watermark=%d [%dk] current=%d size=%d nAlloc=%d blocks=%d\n",
274  name, maxAllocs, maxAllocs*SIZE/1024, currentAllocs, SIZE, nAllocs, blockPtrs.Size() );
275  }
276 
277 private:
278  enum { COUNT = 1024/SIZE };
279  union Chunk {
281  char mem[SIZE];
282  };
283  struct Block {
285  };
287  Chunk* root;
288 
290  int nAllocs;
292 };
293 
294 
295 
316 {
317 public:
318  virtual ~XMLVisitor() {}
319 
321  virtual bool visitEnter( const XMLDocument& /*doc*/ ) { return true; }
323  virtual bool VisitExit( const XMLDocument& /*doc*/ ) { return true; }
324 
326  virtual bool visitEnter( const XMLElement& /*element*/, const XMLAttribute* /*firstAttribute*/ ) { return true; }
328  virtual bool visitExit( const XMLElement& /*element*/ ) { return true; }
329 
331  virtual bool visit( const XMLDeclaration& /*declaration*/ ) { return true; }
333  virtual bool visit( const XMLText& /*text*/ ) { return true; }
335  virtual bool visit( const XMLComment& /*comment*/ ) { return true; }
337  virtual bool visit( const XMLUnknown& /*unknown*/ ) { return true; }
338 };
339 
340 
341 /*
342  Utility functionality.
343 */
344 class XMLUtil
345 {
346 public:
347  // Anything in the high order range of UTF-8 is assumed to not be whitespace. This isn't
348  // correct, but simple, and usually works.
349  static const char* SkipWhiteSpace( const char* p ) { while( !IsUTF8Continuation(*p) && isspace( *reinterpret_cast<const unsigned char*>(p) ) ) { ++p; } return p; }
350  static char* SkipWhiteSpace( char* p ) { while( !IsUTF8Continuation(*p) && isspace( *reinterpret_cast<unsigned char*>(p) ) ) { ++p; } return p; }
351 
352  inline static bool StringEqual( const char* p, const char* q, int nChar=INT_MAX ) {
353  int n = 0;
354  if ( p == q ) {
355  return true;
356  }
357  while( *p && *q && *p == *q && n<nChar ) {
358  ++p; ++q; ++n;
359  }
360  if ( (n == nChar) || ( *p == 0 && *q == 0 ) ) {
361  return true;
362  }
363  return false;
364  }
365  inline static int IsUTF8Continuation( const char p ) { return p & 0x80; }
366  inline static int IsAlphaNum( unsigned char anyByte ) { return ( anyByte < 128 ) ? isalnum( anyByte ) : 1; }
367  inline static int IsAlpha( unsigned char anyByte ) { return ( anyByte < 128 ) ? isalpha( anyByte ) : 1; }
368 
369  static const char* readBOM( const char* p, bool* hasBOM );
370  // p is the starting location,
371  // the UTF-8 value of the entity will be placed in value, and length filled in.
372  static const char* getCharacterRef( const char* p, char* value, int* length );
373  static void convertUTF32ToUTF8( unsigned long input, char* output, int* length );
374 
375  // converts primitive types to strings
376  static void toStr( int v, char* buffer, int bufferSize );
377  static void toStr( long v, char* buffer, int bufferSize );
378  static void toStr( unsigned v, char* buffer, int bufferSize );
379  static void toStr( bool v, char* buffer, int bufferSize );
380  static void toStr( float v, char* buffer, int bufferSize );
381  static void toStr( double v, char* buffer, int bufferSize );
382  static void toStr( char v, char* buffer, int bufferSize );
383 
384  // converts strings to primitive types
385  static bool toInt( const char* str, int* value );
386  static bool toUnsigned( const char* str, unsigned* value );
387  static bool toBool( const char* str, bool* value );
388  static bool toFloat( const char* str, float* value );
389  static bool toDouble( const char* str, double* value );
390 };
391 
392 
418 class XMLNode
419 {
420  friend class XMLDocument;
421  friend class XMLElement;
422 public:
423 
425  const XMLDocument* GetDocument() const { return document; }
428 
429  virtual XMLElement* ToElement() { return 0; }
430  virtual XMLText* ToText() { return 0; }
431  virtual XMLComment* ToComment() { return 0; }
432  virtual XMLDocument* ToDocument() { return 0; }
433  virtual XMLDeclaration* ToDeclaration() { return 0; }
434  virtual XMLUnknown* ToUnknown() { return 0; }
435 
436  virtual const XMLElement* ToElement() const { return 0; }
437  virtual const XMLText* ToText() const { return 0; }
438  virtual const XMLComment* ToComment() const { return 0; }
439  virtual const XMLDocument* ToDocument() const { return 0; }
440  virtual const XMLDeclaration* ToDeclaration() const { return 0; }
441  virtual const XMLUnknown* ToUnknown() const { return 0; }
442 
452  const char* Value() const { return value.getStr(); }
456  void setValue( const char* val, bool staticMem=false );
457 
459  const XMLNode* Parent() const { return parent; }
460  XMLNode* Parent() { return parent; }
461 
463  bool NoChildren() const { return !firstChild; }
464 
466  const XMLNode* FirstChild() const { return firstChild; }
471  const XMLElement* firstChildElement( const char* value=0 ) const;
472  XMLElement* FirstChildElement( const char* _value=0 ) { return const_cast<XMLElement*>(const_cast<const XMLNode*>(this)->firstChildElement( _value )); }
473 
475  const XMLNode* LastChild() const { return lastChild; }
476  XMLNode* LastChild() { return const_cast<XMLNode*>(const_cast<const XMLNode*>(this)->LastChild() ); }
477 
481  const XMLElement* lastChildElement( const char* value=0 ) const;
482  XMLElement* LastChildElement( const char* _value=0 ) { return const_cast<XMLElement*>(const_cast<const XMLNode*>(this)->lastChildElement(_value) ); }
483 
485  const XMLNode* PreviousSibling() const { return prev; }
486  XMLNode* PreviousSibling() { return prev; }
487 
489  const XMLElement* previousSiblingElement( const char* value=0 ) const ;
490  XMLElement* PreviousSiblingElement( const char* _value=0 ) { return const_cast<XMLElement*>(const_cast<const XMLNode*>(this)->previousSiblingElement( _value ) ); }
491 
493  const XMLNode* NextSibling() const { return next; }
494  XMLNode* NextSibling() { return next; }
495 
497  const XMLElement* nextSiblingElement( const char* value=0 ) const;
498  XMLElement* NextSiblingElement( const char* _value=0 ) { return const_cast<XMLElement*>(const_cast<const XMLNode*>(this)->nextSiblingElement( _value ) ); }
499 
503  XMLNode* insertEndChild( XMLNode* addThis );
504 
505  XMLNode* LinkEndChild( XMLNode* addThis ) { return insertEndChild( addThis ); }
509  XMLNode* insertFirstChild( XMLNode* addThis );
513  XMLNode* insertAfterChild( XMLNode* afterThis, XMLNode* addThis );
514 
518  void deleteChildren();
519 
523  void deleteChild( XMLNode* node );
524 
534  virtual XMLNode* shallowClone( XMLDocument* document ) const = 0;
535 
542  virtual bool shallowEqual( const XMLNode* compare ) const = 0;
543 
566  virtual bool accept( XMLVisitor* visitor ) const = 0;
567 
568  // internal
569  virtual char* parseDeep( char*, StrPair* );
570 
571 protected:
572  XMLNode( XMLDocument* );
573  virtual ~XMLNode();
574  XMLNode( const XMLNode& ); // not supported
575  XMLNode& operator=( const XMLNode& ); // not supported
576 
579  mutable StrPair value;
580 
583 
586 
587 private:
589  void unlink( XMLNode* child );
590 };
591 
592 
605 class XMLText : public XMLNode
606 {
607  friend class XMLBase;
608  friend class XMLDocument;
609 public:
610  virtual bool accept( XMLVisitor* visitor ) const;
611 
612  virtual XMLText* ToText() { return this; }
613  virtual const XMLText* ToText() const { return this; }
614 
616  void SetCData( bool _isCData ) { this->isCData = _isCData; }
618  bool CData() const { return isCData; }
619 
620  char* parseDeep( char*, StrPair* endTag );
621  virtual XMLNode* shallowClone( XMLDocument* document ) const;
622  virtual bool shallowEqual( const XMLNode* compare ) const;
623 
624 
625 protected:
626  XMLText( XMLDocument* doc ) : XMLNode( doc ), isCData( false ) {}
627  virtual ~XMLText() {}
628  XMLText( const XMLText& ); // not supported
629  XMLText& operator=( const XMLText& ); // not supported
630 
631 private:
632  bool isCData;
633 };
634 
635 
637 class XMLComment : public XMLNode
638 {
639  friend class XMLDocument;
640 public:
641  virtual XMLComment* ToComment() { return this; }
642  virtual const XMLComment* ToComment() const { return this; }
643 
644  virtual bool accept( XMLVisitor* visitor ) const;
645 
646  char* parseDeep( char*, StrPair* endTag );
647  virtual XMLNode* shallowClone( XMLDocument* document ) const;
648  virtual bool shallowEqual( const XMLNode* compare ) const;
649 
650 protected:
651  XMLComment( XMLDocument* doc );
652  virtual ~XMLComment();
653  XMLComment( const XMLComment& ); // not supported
654  XMLComment& operator=( const XMLComment& ); // not supported
655 
656 private:
657 };
658 
659 
671 class XMLDeclaration : public XMLNode
672 {
673  friend class XMLDocument;
674 public:
675  virtual XMLDeclaration* ToDeclaration() { return this; }
676  virtual const XMLDeclaration* ToDeclaration() const { return this; }
677 
678  virtual bool accept( XMLVisitor* visitor ) const;
679 
680  char* parseDeep( char*, StrPair* endTag );
681  virtual XMLNode* shallowClone( XMLDocument* document ) const;
682  virtual bool shallowEqual( const XMLNode* compare ) const;
683 
684 protected:
685  XMLDeclaration( XMLDocument* doc );
686  virtual ~XMLDeclaration();
687  XMLDeclaration( const XMLDeclaration& ); // not supported
688  XMLDeclaration& operator=( const XMLDeclaration& ); // not supported
689 };
690 
691 
699 class XMLUnknown : public XMLNode
700 {
701  friend class XMLDocument;
702 public:
703  virtual XMLUnknown* ToUnknown() { return this; }
704  virtual const XMLUnknown* ToUnknown() const { return this; }
705 
706  virtual bool accept( XMLVisitor* visitor ) const;
707 
708  char* parseDeep( char*, StrPair* endTag );
709  virtual XMLNode* shallowClone( XMLDocument* document ) const;
710  virtual bool shallowEqual( const XMLNode* compare ) const;
711 
712 protected:
713  XMLUnknown( XMLDocument* doc );
714  virtual ~XMLUnknown();
715  XMLUnknown( const XMLUnknown& ); // not supported
716  XMLUnknown& operator=( const XMLUnknown& ); // not supported
717 };
718 
719 
720 enum {
723 
726 
742 
745 };
746 
747 
755 {
756  friend class XMLElement;
757 public:
758  const char* Name() const { return name.getStr(); }
759  const char* Value() const { return value.getStr(); }
760  const XMLAttribute* Next() const { return next; }
761 
766  int IntValue() const { int i=0; queryIntValue( &i ); return i; }
768  unsigned UnsignedValue() const { unsigned i=0; queryUnsignedValue( &i ); return i; }
770  bool BoolValue() const { bool b=false; queryBoolValue( &b ); return b; }
772  double DoubleValue() const { double d=0.0; queryDoubleValue( &d ); return d; }
774  float FloatValue() const { float f=0.0; queryFloatValue( &f ); return f; }
775 
780  int queryIntValue( int* value ) const;
782  int queryUnsignedValue( unsigned int* value ) const;
784  int queryBoolValue( bool* value ) const;
786  int queryDoubleValue( double* value ) const;
788  int queryFloatValue( float* value ) const;
789 
791  void setAttribute( const char* value );
793  void setAttribute( char value );
795  void setAttribute( int value );
797  void setAttribute( long value );
799  void setAttribute( unsigned value );
801  void setAttribute( bool value );
803  void setAttribute( double value );
805  void setAttribute( float value );
806 
807 private:
808  enum { BUF_SIZE = 200 };
809 
810  XMLAttribute() : next( 0 ), memPool( NULL ) {}
811  virtual ~XMLAttribute() {}
812  XMLAttribute( const XMLAttribute& ); // not supported
813  void operator=( const XMLAttribute& ); // not supported
814  void setName( const char* name );
815 
816  char* parseDeep( char* p, bool processEntities );
817 
818  mutable StrPair name;
819  mutable StrPair value;
822 };
823 
824 
829 class XMLElement : public XMLNode
830 {
831  friend class XMLBase;
832  friend class XMLDocument;
833 public:
835  const char* Name() const { return Value(); }
837  void SetName( const char* str, bool staticMem=false ) { setValue( str, staticMem ); }
838 
839  virtual XMLElement* ToElement() { return this; }
840  virtual const XMLElement* ToElement() const { return this; }
841  virtual bool accept( XMLVisitor* visitor ) const;
842 
866  const char* attribute( const char* name, const char* value=0 ) const;
867 
873  int IntAttribute( const char* name ) const { int i=0; QueryIntAttribute( name, &i ); return i; }
875  unsigned UnsignedAttribute( const char* name ) const{ unsigned i=0; QueryUnsignedAttribute( name, &i ); return i; }
877  bool BoolAttribute( const char* name ) const { bool b=false; QueryBoolAttribute( name, &b ); return b; }
879  double DoubleAttribute( const char* name ) const { double d=0; QueryDoubleAttribute( name, &d ); return d; }
881  float FloatAttribute( const char* name ) const { float f=0; QueryFloatAttribute( name, &f ); return f; }
882 
896  int QueryIntAttribute( const char* name, int* _value ) const { const XMLAttribute* a = findAttribute( name ); if ( !a ) return XML_NO_ATTRIBUTE; return a->queryIntValue( _value ); }
898  int QueryUnsignedAttribute( const char* name, unsigned int* _value ) const { const XMLAttribute* a = findAttribute( name ); if ( !a ) return XML_NO_ATTRIBUTE; return a->queryUnsignedValue( _value ); }
900  int QueryBoolAttribute( const char* name, bool* _value ) const { const XMLAttribute* a = findAttribute( name ); if ( !a ) return XML_NO_ATTRIBUTE; return a->queryBoolValue( _value ); }
902  int QueryDoubleAttribute( const char* name, double* _value ) const { const XMLAttribute* a = findAttribute( name ); if ( !a ) return XML_NO_ATTRIBUTE; return a->queryDoubleValue( _value ); }
904  int QueryFloatAttribute( const char* name, float* _value ) const { const XMLAttribute* a = findAttribute( name ); if ( !a ) return XML_NO_ATTRIBUTE; return a->queryFloatValue( _value ); }
905 
907  void SetAttribute( const char* name, const char* _value ) { XMLAttribute* a = findOrCreateAttribute( name ); a->setAttribute( _value ); }
909  void SetAttribute( const char* name, char _value ) { XMLAttribute* a = findOrCreateAttribute( name ); a->setAttribute( _value ); }
911  void SetAttribute( const char* name, int _value ) { XMLAttribute* a = findOrCreateAttribute( name ); a->setAttribute( _value ); }
913  void SetAttribute( const char* name, unsigned _value ) { XMLAttribute* a = findOrCreateAttribute( name ); a->setAttribute( _value ); }
915  void SetAttribute( const char* name, bool _value ) { XMLAttribute* a = findOrCreateAttribute( name ); a->setAttribute( _value ); }
917  void SetAttribute( const char* name, double _value ) { XMLAttribute* a = findOrCreateAttribute( name ); a->setAttribute( _value ); }
919  void SetAttribute( const char* name, long _value ) { XMLAttribute* a = findOrCreateAttribute( name ); a->setAttribute( _value ); }
920 
921 
925  void deleteAttribute( const char* name );
926 
928  const XMLAttribute* FirstAttribute() const { return rootAttribute; }
930  const XMLAttribute* findAttribute( const char* name ) const;
931 
960  const char* getText() const;
961 
988  int queryIntText( int* _value ) const;
990  int queryUnsignedText( unsigned* _value ) const;
992  int queryBoolText( bool* _value ) const;
994  int queryDoubleText( double* _value ) const;
996  int queryFloatText( float* _value ) const;
997 
998  // internal:
999  enum {
1000  OPEN, // <foo>
1001  CLOSED, // <foo/>
1002  CLOSING // </foo>
1003  };
1004  int ClosingType() const { return closingType; }
1005  char* parseDeep( char* p, StrPair* endTag );
1006  virtual XMLNode* shallowClone( XMLDocument* document ) const;
1007  virtual bool shallowEqual( const XMLNode* compare ) const;
1008 
1009 private:
1010  XMLElement( XMLDocument* doc );
1011  virtual ~XMLElement();
1012  XMLElement( const XMLElement& ); // not supported
1013  void operator=( const XMLElement& ); // not supported
1014 
1015  XMLAttribute* findAttribute( const char* name );
1016  XMLAttribute* findOrCreateAttribute( const char* name );
1017  //void LinkAttribute( XMLAttribute* attrib );
1018  char* parseAttributes( char* p );
1019 
1021  // The attribute list is ordered; there is no 'lastAttribute'
1022  // because the list needs to be scanned for dupes before adding
1023  // a new attribute.
1025 };
1026 
1027 
1033 class XMLDocument : public XMLNode
1034 {
1035  friend class XMLElement;
1036 public:
1038  XMLDocument( bool processEntities = true );
1039  ~XMLDocument();
1040 
1041  virtual XMLDocument* ToDocument() { return this; }
1042  virtual const XMLDocument* ToDocument() const { return this; }
1043 
1049  int parse( const char* xml );
1050 
1056  int loadFile( const char* filename );
1057 
1065  int loadFile( FILE* );
1066 
1072  int saveFile( const char* filename );
1073 
1081  int saveFile( FILE* );
1082 
1083  bool ProcessEntities() const { return processEntities; }
1084 
1088  bool HasBOM() const { return writeBOM; }
1091  void SetBOM( bool useBOM ) { writeBOM = useBOM; }
1092 
1097  const XMLElement* RootElement() const { return firstChildElement(); }
1098 
1113  void print( XMLPrinter* streamer=0 );
1114  virtual bool accept( XMLVisitor* visitor ) const;
1115 
1121  XMLElement* newElement( const char* name );
1127  XMLComment* newComment( const char* comment );
1133  XMLText* newText( const char* text );
1145  XMLDeclaration* newDeclaration( const char* text=0 );
1151  XMLUnknown* newUnknown( const char* text );
1152 
1157  void DeleteNode( XMLNode* node ) { node->parent->deleteChild( node ); }
1158 
1159  void setError( int error, const char* str1, const char* str2 );
1160 
1162  bool Error() const { return errorID != XML_NO_ERROR; }
1164  int ErrorID() const { return errorID; }
1166  const char* GetErrorStr1() const { return errorStr1; }
1168  const char* GetErrorStr2() const { return errorStr2; }
1170  void printError() const;
1171 
1172  // internal
1173  char* identify( char* p, XMLNode** node );
1174 
1175  virtual XMLNode* shallowClone( XMLDocument* /*document*/ ) const { return 0; }
1176  virtual bool shallowEqual( const XMLNode* /*compare*/ ) const { return false; }
1177 
1178 private:
1179  XMLDocument( const XMLDocument& ); // not supported
1180  void operator=( const XMLDocument& ); // not supported
1181  void initDocument();
1182 
1183  bool writeBOM;
1185  int errorID;
1186  const char* errorStr1;
1187  const char* errorStr2;
1188  char* charBuffer;
1189 
1194 };
1195 
1196 
1253 {
1254 public:
1256  XMLHandle( XMLNode* _node ) { node = _node; }
1258  XMLHandle( XMLNode& _node ) { node = &_node; }
1260  XMLHandle( const XMLHandle& ref ) { node = ref.node; }
1262  XMLHandle& operator=( const XMLHandle& ref ) { node = ref.node; return *this; }
1263 
1265  XMLHandle FirstChild() { return XMLHandle( node ? node->FirstChild() : 0 ); }
1267  XMLHandle FirstChildElement( const char* value=0 ) { return XMLHandle( node ? node->FirstChildElement( value ) : 0 ); }
1269  XMLHandle LastChild() { return XMLHandle( node ? node->LastChild() : 0 ); }
1271  XMLHandle LastChildElement( const char* _value=0 ) { return XMLHandle( node ? node->LastChildElement( _value ) : 0 ); }
1275  XMLHandle PreviousSiblingElement( const char* _value=0 ) { return XMLHandle( node ? node->PreviousSiblingElement( _value ) : 0 ); }
1279  XMLHandle NextSiblingElement( const char* _value=0 ) { return XMLHandle( node ? node->NextSiblingElement( _value ) : 0 ); }
1280 
1282  XMLNode* ToNode() { return node; }
1284  XMLElement* ToElement() { return ( ( node && node->ToElement() ) ? node->ToElement() : 0 ); }
1286  XMLText* ToText() { return ( ( node && node->ToText() ) ? node->ToText() : 0 ); }
1288  XMLUnknown* ToUnknown() { return ( ( node && node->ToUnknown() ) ? node->ToUnknown() : 0 ); }
1290  XMLDeclaration* ToDeclaration() { return ( ( node && node->ToDeclaration() ) ? node->ToDeclaration() : 0 ); }
1291 
1292 private:
1294 };
1295 
1296 
1302 {
1303 public:
1304  XMLConstHandle( const XMLNode* _node ) { node = _node; }
1305  XMLConstHandle( const XMLNode& _node ) { node = &_node; }
1306  XMLConstHandle( const XMLConstHandle& ref ) { node = ref.node; }
1307 
1308  XMLConstHandle& operator=( const XMLConstHandle& ref ) { node = ref.node; return *this; }
1309 
1310  const XMLConstHandle FirstChild() const { return XMLConstHandle( node ? node->FirstChild() : 0 ); }
1311  const XMLConstHandle FirstChildElement( const char* value=0 ) const { return XMLConstHandle( node ? node->firstChildElement( value ) : 0 ); }
1312  const XMLConstHandle LastChild() const { return XMLConstHandle( node ? node->LastChild() : 0 ); }
1313  const XMLConstHandle LastChildElement( const char* _value=0 ) const { return XMLConstHandle( node ? node->lastChildElement( _value ) : 0 ); }
1315  const XMLConstHandle PreviousSiblingElement( const char* _value=0 ) const { return XMLConstHandle( node ? node->previousSiblingElement( _value ) : 0 ); }
1316  const XMLConstHandle NextSibling() const { return XMLConstHandle( node ? node->NextSibling() : 0 ); }
1317  const XMLConstHandle NextSiblingElement( const char* _value=0 ) const { return XMLConstHandle( node ? node->nextSiblingElement( _value ) : 0 ); }
1318 
1319 
1320  const XMLNode* ToNode() const { return node; }
1321  const XMLElement* ToElement() const { return ( ( node && node->ToElement() ) ? node->ToElement() : 0 ); }
1322  const XMLText* ToText() const { return ( ( node && node->ToText() ) ? node->ToText() : 0 ); }
1323  const XMLUnknown* ToUnknown() const { return ( ( node && node->ToUnknown() ) ? node->ToUnknown() : 0 ); }
1324  const XMLDeclaration* ToDeclaration() const { return ( ( node && node->ToDeclaration() ) ? node->ToDeclaration() : 0 ); }
1325 
1326 private:
1327  const XMLNode* node;
1328 };
1329 
1330 
1373 class XMLPrinter : public XMLVisitor
1374 {
1375 public:
1382  XMLPrinter( FILE* file=0, bool compact = false );
1384 
1386  void pushHeader( bool writeBOM, bool writeDeclaration );
1390  void openElement( const char* name );
1392  void pushAttribute( const char* name, const char* value );
1393  void pushAttribute( const char* name, int value );
1394  void pushAttribute( const char* name, unsigned value );
1395  void pushAttribute( const char* name, bool value );
1396  void pushAttribute( const char* name, double value );
1398  void closeElement();
1399 
1401  void pushText( const char* text, bool cdata=false );
1403  void pushText( int value );
1405  void pushText( unsigned value );
1407  void pushText( bool value );
1409  void pushText( float value );
1411  void pushText( double value );
1412 
1414  void pushComment( const char* comment );
1415 
1416  void pushDeclaration( const char* value );
1417  void pushUnknown( const char* value );
1418 
1419  virtual bool visitEnter( const XMLDocument& /*doc*/ );
1420  virtual bool VisitExit( const XMLDocument& /*doc*/ ) { return true; }
1421 
1422  virtual bool visitEnter( const XMLElement& element, const XMLAttribute* attribute );
1423  virtual bool visitExit( const XMLElement& element );
1424 
1425  virtual bool visit( const XMLText& text );
1426  virtual bool visit( const XMLComment& comment );
1427  virtual bool visit( const XMLDeclaration& declaration );
1428  virtual bool visit( const XMLUnknown& unknown );
1429 
1434  const char* CStr() const { return buffer.Mem(); }
1440  int CStrSize() const { return buffer.Size(); }
1441 
1442 private:
1443  void sealElement();
1444  void printSpace( int depth );
1445  void printString( const char*, bool restrictedEntitySet ); // prints out, after detecting entities.
1446  void print( const char* format, ... );
1447 
1450  FILE* fp;
1451  int depth;
1455 
1456  enum {
1458  BUF_SIZE = 200
1459  };
1462 
1465 #ifdef _MSC_VER
1466  DynArray< char, 20 > accumulator;
1467 #endif
1468 };
1469 
1470 
1471 } // tinyxml2
1472 
1473 
1474 #endif // TINYXML2_INCLUDED
virtual XMLElement * ToElement()
Safely cast to an Element, or null.
Definition: tinyxml2.hpp:839
const XMLElement * nextSiblingElement(const char *value=0) const
Get the next (right) sibling element of this node, with an opitionally supplied name.
Definition: tinyxml2.cpp:658
double DoubleAttribute(const char *name) const
See IntAttribute()
Definition: tinyxml2.hpp:879
Definition: tinyxml2.hpp:739
T & operator[](int i)
Definition: tinyxml2.hpp:183
MemPoolT< sizeof(XMLElement) > elementPool
Definition: tinyxml2.hpp:1190
Definition: tinyxml2.hpp:344
const XMLDeclaration * ToDeclaration() const
Definition: tinyxml2.hpp:1324
bool BoolValue() const
Query as a boolean. See IntAttribute()
Definition: tinyxml2.hpp:770
static const char * getCharacterRef(const char *p, char *value, int *length)
Definition: tinyxml2.cpp:310
void SetAttribute(const char *name, double _value)
Sets the named attribute to value.
Definition: tinyxml2.hpp:917
bool Error() const
Return true if there was an error parsing the document.
Definition: tinyxml2.hpp:1162
void setValue(const char *val, bool staticMem=false)
Definition: tinyxml2.cpp:538
virtual ~XMLText()
Definition: tinyxml2.hpp:627
const XMLConstHandle FirstChild() const
Definition: tinyxml2.hpp:1310
const XMLConstHandle LastChild() const
Definition: tinyxml2.hpp:1312
const XMLText * ToText() const
Definition: tinyxml2.hpp:1322
virtual void Free(void *mem)
Definition: tinyxml2.hpp:264
T * Mem()
Definition: tinyxml2.hpp:188
bool firstElement
Definition: tinyxml2.hpp:1449
XMLElement(XMLDocument *doc)
Definition: tinyxml2.cpp:1016
virtual const XMLDeclaration * ToDeclaration() const
Definition: tinyxml2.hpp:440
T * PushArr(int count)
Definition: tinyxml2.hpp:166
Definition: tinyxml2.hpp:1457
virtual XMLDocument * ToDocument()
Safely cast to a Document, or null.
Definition: tinyxml2.hpp:432
virtual const XMLComment * ToComment() const
Definition: tinyxml2.hpp:438
XMLNode * firstChild
Definition: tinyxml2.hpp:581
static void toStr(int v, char *buffer, int bufferSize)
Definition: tinyxml2.cpp:375
virtual void * Alloc()
Definition: tinyxml2.hpp:244
static const int TIXML2_MINOR_VERSION
Definition: tinyxml2.hpp:70
virtual ~MemPool()
Definition: tinyxml2.hpp:218
virtual bool visit(const XMLText &text)
Visit a text node.
Definition: tinyxml2.cpp:1764
Definition: tinyxml2.hpp:1458
T pool[INIT]
Definition: tinyxml2.hpp:204
Definition: tinyxml2.hpp:725
int queryBoolText(bool *_value) const
See QueryIntText()
Definition: tinyxml2.cpp:1084
int textDepth
Definition: tinyxml2.hpp:1452
DynArray< char, 20 > buffer
Definition: tinyxml2.hpp:1464
void PopArr(int count)
Definition: tinyxml2.hpp:176
Definition: tinyxml2.hpp:230
const XMLNode * node
Definition: tinyxml2.hpp:1327
char * parseText(char *in, const char *endTag, int strFlags)
Definition: tinyxml2.cpp:101
static const char * SkipWhiteSpace(const char *p)
Definition: tinyxml2.hpp:349
void pushDeclaration(const char *value)
Definition: tinyxml2.cpp:1717
static const int TIXML2_MAJOR_VERSION
Definition: tinyxml2.hpp:69
const T & operator[](int i) const
Definition: tinyxml2.hpp:184
Definition: tinyxml2.hpp:278
Definition: tinyxml2.hpp:1373
int CurrentAllocs() const
Definition: tinyxml2.hpp:242
void sealElement()
Definition: tinyxml2.cpp:1655
virtual ~XMLAttribute()
Definition: tinyxml2.hpp:811
MemPoolT< sizeof(XMLAttribute) > attributePool
Definition: tinyxml2.hpp:1191
int QueryUnsignedAttribute(const char *name, unsigned int *_value) const
See QueryIntAttribute()
Definition: tinyxml2.hpp:898
XMLElement * newElement(const char *name)
Definition: tinyxml2.cpp:1315
virtual XMLComment * ToComment()
Safely cast to a Comment, or null.
Definition: tinyxml2.hpp:431
Definition: tinyxml2.hpp:735
virtual bool visit(const XMLComment &)
Visit a comment node.
Definition: tinyxml2.hpp:335
XMLAttribute * findOrCreateAttribute(const char *name)
Definition: tinyxml2.cpp:1117
int depth
Definition: tinyxml2.hpp:1451
Definition: tinyxml2.hpp:1001
XMLNode * FirstChild()
Definition: tinyxml2.hpp:467
const XMLElement * previousSiblingElement(const char *value=0) const
Get the previous (left) sibling element of this node, with an opitionally supplied name...
Definition: tinyxml2.cpp:668
XMLConstHandle & operator=(const XMLConstHandle &ref)
Definition: tinyxml2.hpp:1308
void setName(const char *name)
Definition: tinyxml2.cpp:931
const char * getStr()
Definition: tinyxml2.cpp:143
void print(const char *format,...)
Definition: tinyxml2.cpp:1500
virtual const XMLText * ToText() const
Definition: tinyxml2.hpp:437
int loadFile(const char *filename)
Definition: tinyxml2.cpp:1350
virtual XMLNode * shallowClone(XMLDocument *) const
Definition: tinyxml2.hpp:1175
virtual ~XMLVisitor()
Definition: tinyxml2.hpp:318
XMLElement * NextSiblingElement(const char *_value=0)
Definition: tinyxml2.hpp:498
bool CData() const
Returns true if this is a CDATA text element.
Definition: tinyxml2.hpp:618
virtual void Free(void *)=0
Definition: tinyxml2.hpp:1301
int ClosingType() const
Definition: tinyxml2.hpp:1004
void setAttribute(const char *value)
Set the attribute to a string value.
Definition: tinyxml2.cpp:966
virtual bool visitEnter(const XMLDocument &)
Visit a document.
Definition: tinyxml2.hpp:321
const XMLElement * lastChildElement(const char *value=0) const
Definition: tinyxml2.cpp:646
XMLHandle LastChildElement(const char *_value=0)
Get the last child element of this handle.
Definition: tinyxml2.hpp:1271
char * end
Definition: tinyxml2.hpp:135
virtual bool accept(XMLVisitor *visitor) const
Definition: tinyxml2.cpp:1271
XMLDeclaration(XMLDocument *doc)
Definition: tinyxml2.cpp:833
int errorID
Definition: tinyxml2.hpp:1185
const XMLElement * RootElement() const
Definition: tinyxml2.hpp:1097
StrPair value
Definition: tinyxml2.hpp:579
void SetAttribute(const char *name, char _value)
Sets the named attribute to value.
Definition: tinyxml2.hpp:909
virtual XMLUnknown * ToUnknown()
Safely cast to an Unknown, or null.
Definition: tinyxml2.hpp:703
XMLComment & operator=(const XMLComment &)
const XMLNode * FirstChild() const
Get the first child node, or null if none exists.
Definition: tinyxml2.hpp:466
Definition: tinyxml2.hpp:99
Definition: tinyxml2.hpp:732
int maxAllocs
Definition: tinyxml2.hpp:291
Definition: tinyxml2.hpp:733
const char * Name() const
The name of the attribute.
Definition: tinyxml2.hpp:758
Chunk * root
Definition: tinyxml2.hpp:287
void initDocument()
Definition: tinyxml2.cpp:1305
char * parseDeep(char *, StrPair *endTag)
Definition: tinyxml2.cpp:877
T Pop()
Definition: tinyxml2.hpp:173
Definition: tinyxml2.hpp:829
int parse(const char *xml)
Definition: tinyxml2.cpp:1428
static char * SkipWhiteSpace(char *p)
Definition: tinyxml2.hpp:350
XMLHandle(XMLNode *_node)
Create a handle from any node (at any depth of the tree.) This can be a null pointer.
Definition: tinyxml2.hpp:1256
double DoubleValue() const
Query as a double. See IntAttribute()
Definition: tinyxml2.hpp:772
Definition: tinyxml2.hpp:283
XMLNode * PreviousSibling()
Definition: tinyxml2.hpp:486
int queryFloatValue(float *value) const
See QueryIntAttribute.
Definition: tinyxml2.cpp:954
const char * getText() const
Definition: tinyxml2.cpp:1055
virtual bool VisitExit(const XMLDocument &)
Visit a document.
Definition: tinyxml2.hpp:323
virtual bool shallowEqual(const XMLNode *compare) const
Definition: tinyxml2.cpp:785
virtual bool accept(XMLVisitor *visitor) const
Definition: tinyxml2.cpp:515
char * parseDeep(char *, StrPair *endTag)
Definition: tinyxml2.cpp:804
virtual const XMLText * ToText() const
Definition: tinyxml2.hpp:613
MemPoolT< sizeof(XMLComment) > commentPool
Definition: tinyxml2.hpp:1193
int queryIntText(int *_value) const
Definition: tinyxml2.cpp:1062
int Capacity() const
Definition: tinyxml2.hpp:186
#define TIXML_SNPRINTF
Definition: tinyxml2.hpp:65
XMLText & operator=(const XMLText &)
XMLConstHandle(const XMLNode *_node)
Definition: tinyxml2.hpp:1304
virtual bool visit(const XMLUnknown &)
Visit an unknown node.
Definition: tinyxml2.hpp:337
virtual const XMLUnknown * ToUnknown() const
Definition: tinyxml2.hpp:441
virtual char * parseDeep(char *, StrPair *)
Definition: tinyxml2.cpp:678
virtual bool visit(const XMLText &)
Visit a text node.
Definition: tinyxml2.hpp:333
virtual XMLNode * shallowClone(XMLDocument *document) const =0
void closeElement()
If streaming, close the Element.
Definition: tinyxml2.cpp:1634
bool entityFlag[ENTITY_RANGE]
Definition: tinyxml2.hpp:1460
virtual bool visit(const XMLDeclaration &)
Visit a declaration.
Definition: tinyxml2.hpp:331
Definition: tinyxml2.hpp:145
const XMLNode * ToNode() const
Definition: tinyxml2.hpp:1320
const XMLConstHandle PreviousSibling() const
Definition: tinyxml2.hpp:1314
virtual XMLText * ToText()
Safely cast to Text, or null.
Definition: tinyxml2.hpp:612
Definition: tinyxml2.hpp:101
int IntAttribute(const char *name) const
Definition: tinyxml2.hpp:873
XMLHandle LastChild()
Get the last child of this handle.
Definition: tinyxml2.hpp:1269
char * charBuffer
Definition: tinyxml2.hpp:1188
void SetAttribute(const char *name, bool _value)
Sets the named attribute to value.
Definition: tinyxml2.hpp:915
virtual bool shallowEqual(const XMLNode *compare) const
Definition: tinyxml2.cpp:859
Definition: tinyxml2.hpp:102
XMLDocument(bool processEntities=true)
constructor
Definition: tinyxml2.cpp:1282
XMLNode * Parent()
Definition: tinyxml2.hpp:460
const char * Value() const
The value of the attribute.
Definition: tinyxml2.hpp:759
virtual ~XMLComment()
Definition: tinyxml2.cpp:800
static bool toUnsigned(const char *str, unsigned *value)
Definition: tinyxml2.cpp:409
Definition: tinyxml2.hpp:808
void SetAttribute(const char *name, int _value)
Sets the named attribute to value.
Definition: tinyxml2.hpp:911
XMLDocument * document
Definition: tinyxml2.hpp:577
#define TIXMLASSERT(x)
Definition: tinyxml2.hpp:41
Definition: tinyxml2.hpp:1033
const char * GetErrorStr2() const
Return a possibly helpful secondary diagnostic location or string.
Definition: tinyxml2.hpp:1168
MemPoolT()
Definition: tinyxml2.hpp:233
const XMLUnknown * ToUnknown() const
Definition: tinyxml2.hpp:1323
XMLHandle & operator=(const XMLHandle &ref)
Assignment.
Definition: tinyxml2.hpp:1262
const XMLConstHandle NextSibling() const
Definition: tinyxml2.hpp:1316
void SetBOM(bool useBOM)
Definition: tinyxml2.hpp:1091
bool ProcessEntities() const
Definition: tinyxml2.hpp:1083
const XMLConstHandle NextSiblingElement(const char *_value=0) const
Definition: tinyxml2.hpp:1317
XMLElement * RootElement()
Definition: tinyxml2.hpp:1096
void SetAttribute(const char *name, unsigned _value)
Sets the named attribute to value.
Definition: tinyxml2.hpp:913
const char * errorStr2
Definition: tinyxml2.hpp:1187
virtual bool accept(XMLVisitor *visitor) const =0
void printError() const
If there is an error, print it to stdout.
Definition: tinyxml2.cpp:1464
XMLAttribute * next
Definition: tinyxml2.hpp:820
virtual XMLNode * shallowClone(XMLDocument *document) const
Definition: tinyxml2.cpp:814
Definition: tinyxml2.hpp:721
void SetAttribute(const char *name, const char *_value)
Sets the named attribute to value.
Definition: tinyxml2.hpp:907
void SetAttribute(const char *name, long _value)
Sets the named attribute to value.
Definition: tinyxml2.hpp:919
virtual bool shallowEqual(const XMLNode *compare) const
Definition: tinyxml2.cpp:896
char * start
Definition: tinyxml2.hpp:134
Definition: tinyxml2.hpp:699
int nAllocs
Definition: tinyxml2.hpp:290
Definition: tinyxml2.hpp:1252
Definition: tinyxml2.hpp:730
void deleteChild(XMLNode *node)
Definition: tinyxml2.cpp:571
virtual bool accept(XMLVisitor *visitor) const
Definition: tinyxml2.cpp:827
const XMLNode * Parent() const
Get the parent of this node on the DOM.
Definition: tinyxml2.hpp:459
XMLNode * insertEndChild(XMLNode *addThis)
Definition: tinyxml2.cpp:576
int queryFloatText(float *_value) const
See QueryIntText()
Definition: tinyxml2.cpp:1106
const XMLAttribute * Next() const
The next attribute in the list.
Definition: tinyxml2.hpp:760
void operator=(const XMLAttribute &)
static bool toDouble(const char *str, double *value)
Definition: tinyxml2.cpp:438
XMLUnknown * newUnknown(const char *text)
Definition: tinyxml2.cpp:1343
int queryDoubleText(double *_value) const
See QueryIntText()
Definition: tinyxml2.cpp:1095
int QueryFloatAttribute(const char *name, float *_value) const
See QueryIntAttribute()
Definition: tinyxml2.hpp:904
virtual ~XMLUnknown()
Definition: tinyxml2.cpp:874
void SetName(const char *str, bool staticMem=false)
Set the name of the element.
Definition: tinyxml2.hpp:837
virtual int ItemSize() const
Definition: tinyxml2.hpp:241
void Set(char *_start, char *_end, int _flags)
Definition: tinyxml2.hpp:110
XMLNode * lastChild
Definition: tinyxml2.hpp:582
Definition: tinyxml2.hpp:734
char * parseDeep(char *p, StrPair *endTag)
Definition: tinyxml2.cpp:1211
Definition: tinyxml2.hpp:418
int saveFile(const char *filename)
Definition: tinyxml2.cpp:1404
int IntValue() const
Definition: tinyxml2.hpp:766
Definition: tinyxml2.hpp:92
virtual bool visitEnter(const XMLDocument &)
Visit a document.
Definition: tinyxml2.cpp:1741
char * parseDeep(char *, StrPair *endTag)
Definition: tinyxml2.cpp:841
virtual XMLNode * shallowClone(XMLDocument *document) const
Definition: tinyxml2.cpp:1237
XMLNode * insertAfterChild(XMLNode *afterThis, XMLNode *addThis)
Definition: tinyxml2.cpp:617
void setError(int error, const char *str1, const char *str2)
Definition: tinyxml2.cpp:1458
const char * Value() const
Definition: tinyxml2.hpp:452
XMLDeclaration & operator=(const XMLDeclaration &)
int closingType
Definition: tinyxml2.hpp:1020
void DeleteNode(XMLNode *node)
Definition: tinyxml2.hpp:1157
StrPair value
Definition: tinyxml2.hpp:819
MemPool()
Definition: tinyxml2.hpp:217
Definition: tinyxml2.hpp:729
XMLDeclaration * newDeclaration(const char *text=0)
Definition: tinyxml2.cpp:1336
XMLNode(XMLDocument *)
Definition: tinyxml2.cpp:527
virtual void * Alloc()=0
Definition: tinyxml2.hpp:744
XMLHandle NextSiblingElement(const char *_value=0)
Get the next sibling element of this handle.
Definition: tinyxml2.hpp:1279
Definition: tinyxml2.hpp:754
bool BoolAttribute(const char *name) const
See IntAttribute()
Definition: tinyxml2.hpp:877
void openElement(const char *name)
Definition: tinyxml2.cpp:1586
static bool toFloat(const char *str, float *value)
Definition: tinyxml2.cpp:431
char * parseDeep(char *, StrPair *endTag)
Definition: tinyxml2.cpp:754
const XMLConstHandle LastChildElement(const char *_value=0) const
Definition: tinyxml2.hpp:1313
virtual bool VisitExit(const XMLDocument &)
Visit a document.
Definition: tinyxml2.hpp:1420
virtual ~XMLNode()
Definition: tinyxml2.cpp:531
int size
Definition: tinyxml2.hpp:206
char * identify(char *p, XMLNode **node)
Definition: tinyxml2.cpp:445
void pushUnknown(const char *value)
Definition: tinyxml2.cpp:1729
XMLDocument * GetDocument()
Get the XMLDocument that owns this XMLNode.
Definition: tinyxml2.hpp:427
XMLUnknown & operator=(const XMLUnknown &)
const XMLDocument * GetDocument() const
Get the XMLDocument that owns this XMLNode.
Definition: tinyxml2.hpp:425
static void convertUTF32ToUTF8(unsigned long input, char *output, int *length)
Definition: tinyxml2.cpp:228
int QueryBoolAttribute(const char *name, bool *_value) const
See QueryIntAttribute()
Definition: tinyxml2.hpp:900
virtual bool visitExit(const XMLElement &element)
Visit an element.
Definition: tinyxml2.cpp:1759
virtual bool shallowEqual(const XMLNode *compare) const =0
void operator=(const XMLElement &)
char * parseDeep(char *p, bool processEntities)
Definition: tinyxml2.cpp:906
Definition: tinyxml2.hpp:214
Definition: tinyxml2.hpp:741
virtual XMLDeclaration * ToDeclaration()
Safely cast to a Declaration, or null.
Definition: tinyxml2.hpp:675
int queryBoolValue(bool *value) const
See QueryIntAttribute.
Definition: tinyxml2.cpp:947
virtual XMLUnknown * ToUnknown()
Safely cast to an Unknown, or null.
Definition: tinyxml2.hpp:434
Definition: tinyxml2.hpp:727
DynArray< Block *, 10 > blockPtrs
Definition: tinyxml2.hpp:286
static bool StringEqual(const char *p, const char *q, int nChar=INT_MAX)
Definition: tinyxml2.hpp:352
void printString(const char *, bool restrictedEntitySet)
Definition: tinyxml2.cpp:1539
~XMLPrinter()
Definition: tinyxml2.hpp:1383
Definition: tinyxml2.hpp:731
unsigned UnsignedAttribute(const char *name) const
See IntAttribute()
Definition: tinyxml2.hpp:875
Definition: tinyxml2.hpp:279
bool processEntities
Definition: tinyxml2.hpp:1184
void deleteChildren()
Definition: tinyxml2.cpp:545
~MemPoolT()
Definition: tinyxml2.hpp:234
XMLElement * FirstChildElement(const char *_value=0)
Definition: tinyxml2.hpp:472
XMLElement * PreviousSiblingElement(const char *_value=0)
Definition: tinyxml2.hpp:490
StrPair()
Definition: tinyxml2.hpp:107
XMLConstHandle(const XMLNode &_node)
Definition: tinyxml2.hpp:1305
virtual const XMLElement * ToElement() const
Definition: tinyxml2.hpp:840
void pushHeader(bool writeBOM, bool writeDeclaration)
Definition: tinyxml2.cpp:1575
XMLComment * newComment(const char *comment)
Definition: tinyxml2.cpp:1322
char * parseAttributes(char *p)
Definition: tinyxml2.cpp:1154
void operator=(const XMLDocument &)
Definition: tinyxml2.hpp:605
XMLConstHandle(const XMLConstHandle &ref)
Definition: tinyxml2.hpp:1306
StrPair name
Definition: tinyxml2.hpp:818
char * parseName(char *in)
Definition: tinyxml2.cpp:119
const XMLNode * PreviousSibling() const
Get the previous (left) sibling node of this node.
Definition: tinyxml2.hpp:485
virtual bool accept(XMLVisitor *visitor) const
Definition: tinyxml2.cpp:901
Definition: tinyxml2.hpp:740
MemPool * memPool
Definition: tinyxml2.hpp:821
virtual bool visitEnter(const XMLElement &, const XMLAttribute *)
Visit an element.
Definition: tinyxml2.hpp:326
const XMLConstHandle FirstChildElement(const char *value=0) const
Definition: tinyxml2.hpp:1311
void SetCData(bool _isCData)
Declare whether this should be CDATA or standard text.
Definition: tinyxml2.hpp:616
virtual const XMLDeclaration * ToDeclaration() const
Definition: tinyxml2.hpp:676
XMLNode * LinkEndChild(XMLNode *addThis)
Definition: tinyxml2.hpp:505
int queryDoubleValue(double *value) const
See QueryIntAttribute.
Definition: tinyxml2.cpp:960
Definition: tinyxml2.hpp:671
FILE * fp
Definition: tinyxml2.hpp:1450
void reset()
Definition: tinyxml2.cpp:83
int ErrorID() const
Return the errorID.
Definition: tinyxml2.hpp:1164
Definition: tinyxml2.hpp:1000
const char * GetErrorStr1() const
Return a possibly helpful diagnostic location or string.
Definition: tinyxml2.hpp:1166
static int IsAlphaNum(unsigned char anyByte)
Definition: tinyxml2.hpp:366
XMLNode * next
Definition: tinyxml2.hpp:585
virtual bool accept(XMLVisitor *visitor) const
Definition: tinyxml2.cpp:790
virtual ~XMLDeclaration()
Definition: tinyxml2.cpp:837
Definition: tinyxml2.hpp:722
Chunk * next
Definition: tinyxml2.hpp:280
const XMLElement * firstChildElement(const char *value=0) const
Definition: tinyxml2.cpp:634
Definition: tinyxml2.hpp:738
friend class XMLBase
Definition: tinyxml2.hpp:831
XMLNode * parent
Definition: tinyxml2.hpp:578
XMLNode * NextSibling()
Definition: tinyxml2.hpp:494
Definition: tinyxml2.hpp:104
XMLNode * ToNode()
Safe cast to XMLNode. This can return null.
Definition: tinyxml2.hpp:1282
void Trace(const char *name)
Definition: tinyxml2.hpp:272
Definition: tinyxml2.hpp:315
XMLHandle NextSibling()
Get the next sibling of this handle.
Definition: tinyxml2.hpp:1277
unsigned UnsignedValue() const
Query as an unsigned integer. See IntAttribute()
Definition: tinyxml2.hpp:768
XMLNode * insertFirstChild(XMLNode *addThis)
Definition: tinyxml2.cpp:596
virtual XMLNode * shallowClone(XMLDocument *document) const
Definition: tinyxml2.cpp:888
virtual bool accept(XMLVisitor *visitor) const
Definition: tinyxml2.cpp:864
MemPoolT< sizeof(XMLText) > textPool
Definition: tinyxml2.hpp:1192
friend class XMLBase
Definition: tinyxml2.hpp:607
int Size() const
Definition: tinyxml2.hpp:185
Definition: tinyxml2.hpp:1002
XMLText(XMLDocument *doc)
Definition: tinyxml2.hpp:626
static const int TIXML2_PATCH_VERSION
Definition: tinyxml2.hpp:71
const char * errorStr1
Definition: tinyxml2.hpp:1186
void unlink(XMLNode *child)
Definition: tinyxml2.cpp:555
const XMLElement * ToElement() const
Definition: tinyxml2.hpp:1321
virtual bool shallowEqual(const XMLNode *compare) const
Definition: tinyxml2.cpp:1248
XMLAttribute()
Definition: tinyxml2.hpp:810
MemPool * memPool
Definition: tinyxml2.hpp:588
virtual XMLText * ToText()
Safely cast to Text, or null.
Definition: tinyxml2.hpp:430
void deleteAttribute(const char *name)
Definition: tinyxml2.cpp:1138
void print(XMLPrinter *streamer=0)
Definition: tinyxml2.cpp:1451
int QueryDoubleAttribute(const char *name, double *_value) const
See QueryIntAttribute()
Definition: tinyxml2.hpp:902
bool HasBOM() const
Definition: tinyxml2.hpp:1088
void EnsureCapacity(int cap)
Definition: tinyxml2.hpp:192
int queryUnsignedValue(unsigned int *value) const
See QueryIntAttribute.
Definition: tinyxml2.cpp:941
XMLText * ToText()
Safe cast to XMLText. This can return null.
Definition: tinyxml2.hpp:1286
static bool toInt(const char *str, int *value)
Definition: tinyxml2.cpp:403
XMLText * newText(const char *text)
Definition: tinyxml2.cpp:1329
const XMLNode * LastChild() const
Get the last child node, or null if none exists.
Definition: tinyxml2.hpp:475
static int IsUTF8Continuation(const char p)
Definition: tinyxml2.hpp:365
XMLComment(XMLDocument *doc)
Definition: tinyxml2.cpp:796
~DynArray()
Definition: tinyxml2.hpp:154
const T * Mem() const
Definition: tinyxml2.hpp:187
void setStr(const char *str, int flags=0)
Definition: tinyxml2.cpp:92
T * mem
Definition: tinyxml2.hpp:203
XMLAttribute * rootAttribute
Definition: tinyxml2.hpp:1024
XMLNode * LastChild()
Definition: tinyxml2.hpp:476
const char * attribute(const char *name, const char *value=0) const
Definition: tinyxml2.cpp:1046
void pushAttribute(const char *name, const char *value)
If streaming, add an attribute to an open element.
Definition: tinyxml2.cpp:1603
XMLHandle PreviousSibling()
Get the previous sibling of this handle.
Definition: tinyxml2.hpp:1273
XMLDeclaration * ToDeclaration()
Safe cast to XMLDeclaration. This can return null.
Definition: tinyxml2.hpp:1290
static const char * readBOM(const char *p, bool *hasBOM)
Definition: tinyxml2.cpp:216
bool NoChildren() const
Returns true if this node has no children.
Definition: tinyxml2.hpp:463
bool compactMode
Definition: tinyxml2.hpp:1454
virtual const XMLDocument * ToDocument() const
Definition: tinyxml2.hpp:439
int CStrSize() const
Definition: tinyxml2.hpp:1440
XMLElement * LastChildElement(const char *_value=0)
Definition: tinyxml2.hpp:482
~StrPair()
Definition: tinyxml2.cpp:79
const XMLAttribute * FirstAttribute() const
Return the first attribute in the list.
Definition: tinyxml2.hpp:928
int queryIntValue(int *value) const
Definition: tinyxml2.cpp:935
XMLUnknown * ToUnknown()
Safe cast to XMLUnknown. This can return null.
Definition: tinyxml2.hpp:1288
int queryUnsignedText(unsigned *_value) const
See QueryIntText()
Definition: tinyxml2.cpp:1073
const XMLConstHandle PreviousSiblingElement(const char *_value=0) const
Definition: tinyxml2.hpp:1315
XMLUnknown(XMLDocument *doc)
Definition: tinyxml2.cpp:870
Definition: tinyxml2.hpp:724
XMLHandle FirstChild()
Get the first child of this handle.
Definition: tinyxml2.hpp:1265
XMLPrinter(FILE *file=0, bool compact=false)
Definition: tinyxml2.cpp:1481
Definition: tinyxml2.hpp:736
virtual const XMLUnknown * ToUnknown() const
Definition: tinyxml2.hpp:704
Chunk chunk[COUNT]
Definition: tinyxml2.hpp:284
XMLElement * ToElement()
Safe cast to XMLElement. This can return null.
Definition: tinyxml2.hpp:1284
XMLNode & operator=(const XMLNode &)
virtual XMLNode * shallowClone(XMLDocument *document) const
Definition: tinyxml2.cpp:776
virtual XMLNode * shallowClone(XMLDocument *document) const
Definition: tinyxml2.cpp:851
float FloatAttribute(const char *name) const
See IntAttribute()
Definition: tinyxml2.hpp:881
bool Empty() const
Definition: tinyxml2.hpp:182
void Push(T t)
Definition: tinyxml2.hpp:160
bool writeBOM
Definition: tinyxml2.hpp:1183
Definition: tinyxml2.hpp:737
bool isCData
Definition: tinyxml2.hpp:632
DynArray< const char *, 10 > stack
Definition: tinyxml2.hpp:1463
void pushText(const char *text, bool cdata=false)
Add a text node.
Definition: tinyxml2.cpp:1660
bool elementJustOpened
Definition: tinyxml2.hpp:1448
virtual const XMLElement * ToElement() const
Definition: tinyxml2.hpp:436
XMLNode * node
Definition: tinyxml2.hpp:1293
XMLNode * prev
Definition: tinyxml2.hpp:584
virtual XMLDocument * ToDocument()
Safely cast to a Document, or null.
Definition: tinyxml2.hpp:1041
virtual int ItemSize() const =0
Definition: tinyxml2.hpp:637
void printSpace(int depth)
Definition: tinyxml2.cpp:1533
float FloatValue() const
Query as a float. See IntAttribute()
Definition: tinyxml2.hpp:774
virtual XMLDeclaration * ToDeclaration()
Safely cast to a Declaration, or null.
Definition: tinyxml2.hpp:433
XMLHandle PreviousSiblingElement(const char *_value=0)
Get the previous sibling element of this handle.
Definition: tinyxml2.hpp:1275
int flags
Definition: tinyxml2.hpp:133
virtual bool shallowEqual(const XMLNode *) const
Definition: tinyxml2.hpp:1176
virtual XMLElement * ToElement()
Safely cast to an Element, or null.
Definition: tinyxml2.hpp:429
virtual XMLComment * ToComment()
Safely cast to a Comment, or null.
Definition: tinyxml2.hpp:641
void pushComment(const char *comment)
Add a comment.
Definition: tinyxml2.cpp:1705
int QueryIntAttribute(const char *name, int *_value) const
Definition: tinyxml2.hpp:896
virtual const XMLComment * ToComment() const
Definition: tinyxml2.hpp:642
const XMLNode * NextSibling() const
Get the next (right) sibling node of this node.
Definition: tinyxml2.hpp:493
Definition: tinyxml2.hpp:129
Definition: tinyxml2.hpp:128
bool processEntities
Definition: tinyxml2.hpp:1453
const XMLAttribute * findAttribute(const char *name) const
Query a specific attribute in the list.
Definition: tinyxml2.cpp:1037
int currentAllocs
Definition: tinyxml2.hpp:289
virtual bool shallowEqual(const XMLNode *compare) const
Definition: tinyxml2.cpp:822
bool restrictedEntityFlag[ENTITY_RANGE]
Definition: tinyxml2.hpp:1461
XMLHandle(const XMLHandle &ref)
Copy constructor.
Definition: tinyxml2.hpp:1260
virtual const XMLDocument * ToDocument() const
Definition: tinyxml2.hpp:1042
char mem[SIZE]
Definition: tinyxml2.hpp:281
static bool toBool(const char *str, bool *value)
Definition: tinyxml2.cpp:415
int allocated
Definition: tinyxml2.hpp:205
Definition: tinyxml2.hpp:743
virtual ~XMLElement()
Definition: tinyxml2.cpp:1020
~XMLDocument()
Definition: tinyxml2.cpp:1288
virtual bool visitExit(const XMLElement &)
Visit an element.
Definition: tinyxml2.hpp:328
XMLHandle(XMLNode &_node)
Create a handle from a node.
Definition: tinyxml2.hpp:1258
static int IsAlpha(unsigned char anyByte)
Definition: tinyxml2.hpp:367
bool Empty() const
Definition: tinyxml2.hpp:115
const char * CStr() const
Definition: tinyxml2.hpp:1434
const char * Name() const
Get the name of an element (which is the Value() of the node.)
Definition: tinyxml2.hpp:835
XMLHandle FirstChildElement(const char *value=0)
Get the first child element of this handle.
Definition: tinyxml2.hpp:1267
void SetInternedStr(const char *str)
Definition: tinyxml2.hpp:117