1562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project/*
2562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectwww.sourceforge.net/projects/tinyxml
30238a20410cdb339709c983dede5fc43c0a3bdc4Dan AlbertOriginal code (2.0 and earlier )copyright (c) 2000-2002 Lee Thomason (www.grinninglizard.com)
4562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
5562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectThis software is provided 'as-is', without any express or implied
6562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectwarranty. In no event will the authors be held liable for any
7562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectdamages arising from the use of this software.
8562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
9562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectPermission is granted to anyone to use this software for any
10562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectpurpose, including commercial applications, and to alter it and
11562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectredistribute it freely, subject to the following restrictions:
12562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
13562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project1. The origin of this software must not be misrepresented; you must
14562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectnot claim that you wrote the original software. If you use this
15562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectsoftware in a product, an acknowledgment in the product documentation
16562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectwould be appreciated but is not required.
17562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
18562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project2. Altered source versions must be plainly marked as such, and
19562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectmust not be misrepresented as being the original software.
20562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
21562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project3. This notice may not be removed or altered from any source
22562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectdistribution.
23562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project*/
24562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
25562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#include <ctype.h>
260238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert#include "tinyxml.h"
27562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
28562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#ifdef TIXML_USE_STL
29562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#include <sstream>
30562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#endif
31562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
32562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
33562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectbool TiXmlBase::condenseWhiteSpace = true;
34562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
350238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albertvoid TiXmlBase::PutString( const TIXML_STRING& str, TIXML_OSTREAM* stream )
36562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
370238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	TIXML_STRING buffer;
380238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	PutString( str, &buffer );
390238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	(*stream) << buffer;
40562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
41562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
420238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albertvoid TiXmlBase::PutString( const TIXML_STRING& str, TIXML_STRING* outString )
43562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
44562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	int i=0;
45562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
46562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	while( i<(int)str.length() )
47562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
48562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		unsigned char c = (unsigned char) str[i];
49562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
50562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		if (    c == '&'
51562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		     && i < ( (int)str.length() - 2 )
52562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			 && str[i+1] == '#'
53562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			 && str[i+2] == 'x' )
54562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		{
55562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			// Hexadecimal character reference.
56562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			// Pass through unchanged.
57562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			// &#xA9;	-- copyright symbol, for example.
58562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			//
59562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			// The -1 is a bug fix from Rob Laveaux. It keeps
60562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			// an overflow from happening if there is no ';'.
61562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			// There are actually 2 ways to exit this loop -
62562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			// while fails (error case) and break (semicolon found).
63562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			// However, there is no mechanism (currently) for
64562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			// this function to return an error.
65562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			while ( i<(int)str.length()-1 )
66562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			{
67562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project				outString->append( str.c_str() + i, 1 );
68562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project				++i;
69562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project				if ( str[i] == ';' )
70562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project					break;
71562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			}
72562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		}
73562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		else if ( c == '&' )
74562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		{
75562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			outString->append( entity[0].str, entity[0].strLength );
76562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			++i;
77562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		}
78562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		else if ( c == '<' )
79562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		{
80562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			outString->append( entity[1].str, entity[1].strLength );
81562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			++i;
82562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		}
83562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		else if ( c == '>' )
84562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		{
85562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			outString->append( entity[2].str, entity[2].strLength );
86562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			++i;
87562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		}
88562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		else if ( c == '\"' )
89562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		{
90562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			outString->append( entity[3].str, entity[3].strLength );
91562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			++i;
92562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		}
93562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		else if ( c == '\'' )
94562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		{
95562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			outString->append( entity[4].str, entity[4].strLength );
96562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			++i;
97562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		}
98562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		else if ( c < 32 )
99562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		{
100562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			// Easy pass at non-alpha/numeric/symbol
101562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			// Below 32 is symbolic.
102562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			char buf[ 32 ];
103562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
104562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			#if defined(TIXML_SNPRINTF)
105562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project				TIXML_SNPRINTF( buf, sizeof(buf), "&#x%02X;", (unsigned) ( c & 0xff ) );
106562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			#else
107562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project				sprintf( buf, "&#x%02X;", (unsigned) ( c & 0xff ) );
108562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			#endif
109562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
110562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			//*ME:	warning C4267: convert 'size_t' to 'int'
111562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			//*ME:	Int-Cast to make compiler happy ...
112562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			outString->append( buf, (int)strlen( buf ) );
113562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			++i;
114562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		}
115562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		else
116562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		{
117562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			//char realc = (char) c;
118562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			//outString->append( &realc, 1 );
119562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			*outString += (char) c;	// somewhat more efficient function call.
120562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			++i;
121562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		}
122562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
123562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
124562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
125562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1260238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert// <-- Strange class for a bug fix. Search for STL_STRING_BUG
1270238a20410cdb339709c983dede5fc43c0a3bdc4Dan AlbertTiXmlBase::StringToBuffer::StringToBuffer( const TIXML_STRING& str )
1280238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert{
1290238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	buffer = new char[ str.length()+1 ];
1300238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	if ( buffer )
1310238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	{
1320238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		strcpy( buffer, str.c_str() );
1330238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	}
1340238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert}
1350238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert
1360238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert
1370238a20410cdb339709c983dede5fc43c0a3bdc4Dan AlbertTiXmlBase::StringToBuffer::~StringToBuffer()
1380238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert{
1390238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	delete [] buffer;
1400238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert}
1410238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert// End strange bug fix. -->
1420238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert
1430238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert
144562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlNode::TiXmlNode( NodeType _type ) : TiXmlBase()
145562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
146562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	parent = 0;
147562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	type = _type;
148562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	firstChild = 0;
149562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	lastChild = 0;
150562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	prev = 0;
151562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	next = 0;
152562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
153562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
154562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
155562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlNode::~TiXmlNode()
156562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
157562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlNode* node = firstChild;
158562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlNode* temp = 0;
159562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
160562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	while ( node )
161562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
162562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		temp = node;
163562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		node = node->next;
164562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		delete temp;
165562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
166562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
167562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
168562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
169562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid TiXmlNode::CopyTo( TiXmlNode* target ) const
170562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
171562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	target->SetValue (value.c_str() );
172562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	target->userData = userData;
173562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
174562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
175562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
176562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid TiXmlNode::Clear()
177562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
178562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlNode* node = firstChild;
179562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlNode* temp = 0;
180562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
181562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	while ( node )
182562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
183562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		temp = node;
184562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		node = node->next;
185562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		delete temp;
186562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
187562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
188562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	firstChild = 0;
189562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	lastChild = 0;
190562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
191562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
192562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
193562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlNode* TiXmlNode::LinkEndChild( TiXmlNode* node )
194562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
195562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	node->parent = this;
196562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
197562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	node->prev = lastChild;
198562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	node->next = 0;
199562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
200562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( lastChild )
201562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		lastChild->next = node;
202562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	else
203562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		firstChild = node;			// it was an empty list.
204562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
205562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	lastChild = node;
206562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return node;
207562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
208562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
209562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
210562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlNode* TiXmlNode::InsertEndChild( const TiXmlNode& addThis )
211562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
212562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlNode* node = addThis.Clone();
213562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( !node )
214562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		return 0;
215562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
216562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return LinkEndChild( node );
217562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
218562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
219562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
220562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlNode* TiXmlNode::InsertBeforeChild( TiXmlNode* beforeThis, const TiXmlNode& addThis )
221562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
2220238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	if ( !beforeThis || beforeThis->parent != this )
223562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		return 0;
224562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
225562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlNode* node = addThis.Clone();
226562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( !node )
227562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		return 0;
228562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	node->parent = this;
229562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
230562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	node->next = beforeThis;
231562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	node->prev = beforeThis->prev;
232562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( beforeThis->prev )
233562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
234562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		beforeThis->prev->next = node;
235562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
236562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	else
237562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
238562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		assert( firstChild == beforeThis );
239562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		firstChild = node;
240562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
241562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	beforeThis->prev = node;
242562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return node;
243562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
244562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
245562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
246562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlNode* TiXmlNode::InsertAfterChild( TiXmlNode* afterThis, const TiXmlNode& addThis )
247562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
2480238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	if ( !afterThis || afterThis->parent != this )
249562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		return 0;
250562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
251562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlNode* node = addThis.Clone();
252562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( !node )
253562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		return 0;
254562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	node->parent = this;
255562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
256562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	node->prev = afterThis;
257562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	node->next = afterThis->next;
258562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( afterThis->next )
259562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
260562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		afterThis->next->prev = node;
261562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
262562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	else
263562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
264562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		assert( lastChild == afterThis );
265562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		lastChild = node;
266562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
267562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	afterThis->next = node;
268562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return node;
269562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
270562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
271562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
272562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlNode* TiXmlNode::ReplaceChild( TiXmlNode* replaceThis, const TiXmlNode& withThis )
273562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
274562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( replaceThis->parent != this )
275562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		return 0;
276562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
277562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlNode* node = withThis.Clone();
278562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( !node )
279562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		return 0;
280562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
281562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	node->next = replaceThis->next;
282562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	node->prev = replaceThis->prev;
283562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
284562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( replaceThis->next )
285562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		replaceThis->next->prev = node;
286562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	else
287562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		lastChild = node;
288562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
289562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( replaceThis->prev )
290562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		replaceThis->prev->next = node;
291562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	else
292562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		firstChild = node;
293562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
294562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	delete replaceThis;
295562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	node->parent = this;
296562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return node;
297562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
298562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
299562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
300562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectbool TiXmlNode::RemoveChild( TiXmlNode* removeThis )
301562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
302562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( removeThis->parent != this )
303562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
304562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		assert( 0 );
305562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		return false;
306562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
307562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
308562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( removeThis->next )
309562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		removeThis->next->prev = removeThis->prev;
310562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	else
311562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		lastChild = removeThis->prev;
312562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
313562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( removeThis->prev )
314562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		removeThis->prev->next = removeThis->next;
315562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	else
316562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		firstChild = removeThis->next;
317562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
318562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	delete removeThis;
319562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return true;
320562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
321562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
322562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectconst TiXmlNode* TiXmlNode::FirstChild( const char * _value ) const
323562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
324562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	const TiXmlNode* node;
325562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	for ( node = firstChild; node; node = node->next )
326562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
327562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		if ( strcmp( node->Value(), _value ) == 0 )
328562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			return node;
329562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
330562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return 0;
331562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
332562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
333562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
3340238a20410cdb339709c983dede5fc43c0a3bdc4Dan AlbertTiXmlNode* TiXmlNode::FirstChild( const char * _value )
3350238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert{
3360238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	TiXmlNode* node;
3370238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	for ( node = firstChild; node; node = node->next )
3380238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	{
3390238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		if ( strcmp( node->Value(), _value ) == 0 )
3400238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert			return node;
3410238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	}
3420238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	return 0;
3430238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert}
3440238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert
3450238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert
346562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectconst TiXmlNode* TiXmlNode::LastChild( const char * _value ) const
347562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
348562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	const TiXmlNode* node;
349562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	for ( node = lastChild; node; node = node->prev )
350562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
351562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		if ( strcmp( node->Value(), _value ) == 0 )
352562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			return node;
353562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
354562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return 0;
355562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
356562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
3570238a20410cdb339709c983dede5fc43c0a3bdc4Dan AlbertTiXmlNode* TiXmlNode::LastChild( const char * _value )
3580238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert{
3590238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	TiXmlNode* node;
3600238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	for ( node = lastChild; node; node = node->prev )
3610238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	{
3620238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		if ( strcmp( node->Value(), _value ) == 0 )
3630238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert			return node;
3640238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	}
3650238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	return 0;
3660238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert}
367562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
368562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectconst TiXmlNode* TiXmlNode::IterateChildren( const TiXmlNode* previous ) const
369562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
370562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( !previous )
371562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
372562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		return FirstChild();
373562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
374562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	else
375562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
376562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		assert( previous->parent == this );
377562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		return previous->NextSibling();
378562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
379562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
380562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
3810238a20410cdb339709c983dede5fc43c0a3bdc4Dan AlbertTiXmlNode* TiXmlNode::IterateChildren( TiXmlNode* previous )
3820238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert{
3830238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	if ( !previous )
3840238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	{
3850238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		return FirstChild();
3860238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	}
3870238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	else
3880238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	{
3890238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		assert( previous->parent == this );
3900238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		return previous->NextSibling();
3910238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	}
3920238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert}
393562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
394562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectconst TiXmlNode* TiXmlNode::IterateChildren( const char * val, const TiXmlNode* previous ) const
395562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
396562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( !previous )
397562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
398562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		return FirstChild( val );
399562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
400562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	else
401562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
402562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		assert( previous->parent == this );
403562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		return previous->NextSibling( val );
404562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
405562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
406562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
4070238a20410cdb339709c983dede5fc43c0a3bdc4Dan AlbertTiXmlNode* TiXmlNode::IterateChildren( const char * val, TiXmlNode* previous )
4080238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert{
4090238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	if ( !previous )
4100238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	{
4110238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		return FirstChild( val );
4120238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	}
4130238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	else
4140238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	{
4150238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		assert( previous->parent == this );
4160238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		return previous->NextSibling( val );
4170238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	}
4180238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert}
419562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
420562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectconst TiXmlNode* TiXmlNode::NextSibling( const char * _value ) const
421562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
422562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	const TiXmlNode* node;
423562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	for ( node = next; node; node = node->next )
424562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
425562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		if ( strcmp( node->Value(), _value ) == 0 )
426562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			return node;
427562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
428562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return 0;
429562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
430562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
4310238a20410cdb339709c983dede5fc43c0a3bdc4Dan AlbertTiXmlNode* TiXmlNode::NextSibling( const char * _value )
4320238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert{
4330238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	TiXmlNode* node;
4340238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	for ( node = next; node; node = node->next )
4350238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	{
4360238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		if ( strcmp( node->Value(), _value ) == 0 )
4370238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert			return node;
4380238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	}
4390238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	return 0;
4400238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert}
441562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
442562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectconst TiXmlNode* TiXmlNode::PreviousSibling( const char * _value ) const
443562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
444562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	const TiXmlNode* node;
445562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	for ( node = prev; node; node = node->prev )
446562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
447562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		if ( strcmp( node->Value(), _value ) == 0 )
448562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			return node;
449562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
450562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return 0;
451562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
452562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
4530238a20410cdb339709c983dede5fc43c0a3bdc4Dan AlbertTiXmlNode* TiXmlNode::PreviousSibling( const char * _value )
4540238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert{
4550238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	TiXmlNode* node;
4560238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	for ( node = prev; node; node = node->prev )
4570238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	{
4580238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		if ( strcmp( node->Value(), _value ) == 0 )
4590238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert			return node;
4600238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	}
4610238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	return 0;
4620238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert}
463562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
464562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid TiXmlElement::RemoveAttribute( const char * name )
465562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
466562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlAttribute* node = attributeSet.Find( name );
467562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( node )
468562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
469562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		attributeSet.Remove( node );
470562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		delete node;
471562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
472562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
473562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
474562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectconst TiXmlElement* TiXmlNode::FirstChildElement() const
475562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
476562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	const TiXmlNode* node;
477562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
478562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	for (	node = FirstChild();
479562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			node;
480562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			node = node->NextSibling() )
481562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
482562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		if ( node->ToElement() )
483562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			return node->ToElement();
484562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
485562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return 0;
486562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
487562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
4880238a20410cdb339709c983dede5fc43c0a3bdc4Dan AlbertTiXmlElement* TiXmlNode::FirstChildElement()
4890238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert{
4900238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	TiXmlNode* node;
4910238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert
4920238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	for (	node = FirstChild();
4930238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert			node;
4940238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert			node = node->NextSibling() )
4950238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	{
4960238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		if ( node->ToElement() )
4970238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert			return node->ToElement();
4980238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	}
4990238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	return 0;
5000238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert}
501562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
502562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectconst TiXmlElement* TiXmlNode::FirstChildElement( const char * _value ) const
503562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
504562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	const TiXmlNode* node;
505562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
506562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	for (	node = FirstChild( _value );
507562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			node;
508562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			node = node->NextSibling( _value ) )
509562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
510562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		if ( node->ToElement() )
511562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			return node->ToElement();
512562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
513562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return 0;
514562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
515562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
5160238a20410cdb339709c983dede5fc43c0a3bdc4Dan AlbertTiXmlElement* TiXmlNode::FirstChildElement( const char * _value )
5170238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert{
5180238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	TiXmlNode* node;
5190238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert
5200238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	for (	node = FirstChild( _value );
5210238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert			node;
5220238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert			node = node->NextSibling( _value ) )
5230238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	{
5240238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		if ( node->ToElement() )
5250238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert			return node->ToElement();
5260238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	}
5270238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	return 0;
5280238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert}
529562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
530562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectconst TiXmlElement* TiXmlNode::NextSiblingElement() const
531562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
532562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	const TiXmlNode* node;
533562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
534562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	for (	node = NextSibling();
5350238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	node;
5360238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	node = node->NextSibling() )
537562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
538562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		if ( node->ToElement() )
539562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			return node->ToElement();
540562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
541562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return 0;
542562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
543562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
5440238a20410cdb339709c983dede5fc43c0a3bdc4Dan AlbertTiXmlElement* TiXmlNode::NextSiblingElement()
5450238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert{
5460238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	TiXmlNode* node;
5470238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert
5480238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	for (	node = NextSibling();
5490238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	node;
5500238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	node = node->NextSibling() )
5510238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	{
5520238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		if ( node->ToElement() )
5530238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert			return node->ToElement();
5540238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	}
5550238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	return 0;
5560238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert}
557562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
558562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectconst TiXmlElement* TiXmlNode::NextSiblingElement( const char * _value ) const
559562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
560562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	const TiXmlNode* node;
561562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
562562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	for (	node = NextSibling( _value );
5630238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	node;
5640238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	node = node->NextSibling( _value ) )
5650238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	{
5660238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		if ( node->ToElement() )
5670238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert			return node->ToElement();
5680238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	}
5690238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	return 0;
5700238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert}
5710238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert
5720238a20410cdb339709c983dede5fc43c0a3bdc4Dan AlbertTiXmlElement* TiXmlNode::NextSiblingElement( const char * _value )
5730238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert{
5740238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	TiXmlNode* node;
5750238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert
5760238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	for (	node = NextSibling( _value );
5770238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	node;
5780238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	node = node->NextSibling( _value ) )
579562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
580562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		if ( node->ToElement() )
581562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			return node->ToElement();
582562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
583562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return 0;
584562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
585562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
586562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
587562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectconst TiXmlDocument* TiXmlNode::GetDocument() const
588562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
589562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	const TiXmlNode* node;
590562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
591562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	for( node = this; node; node = node->parent )
592562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
593562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		if ( node->ToDocument() )
594562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			return node->ToDocument();
595562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
596562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return 0;
597562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
598562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
5990238a20410cdb339709c983dede5fc43c0a3bdc4Dan AlbertTiXmlDocument* TiXmlNode::GetDocument()
6000238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert{
6010238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	TiXmlNode* node;
6020238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert
6030238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	for( node = this; node; node = node->parent )
6040238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	{
6050238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		if ( node->ToDocument() )
6060238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert			return node->ToDocument();
6070238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	}
6080238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	return 0;
6090238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert}
610562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
611562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlElement::TiXmlElement (const char * _value)
6120238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	: TiXmlNode( TiXmlNode::ELEMENT )
613562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
614562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	firstChild = lastChild = 0;
615562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	value = _value;
616562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
617562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
618562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
619562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#ifdef TIXML_USE_STL
620562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlElement::TiXmlElement( const std::string& _value )
6210238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	: TiXmlNode( TiXmlNode::ELEMENT )
622562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
623562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	firstChild = lastChild = 0;
624562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	value = _value;
625562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
626562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#endif
627562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
628562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
629562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlElement::TiXmlElement( const TiXmlElement& copy)
6300238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	: TiXmlNode( TiXmlNode::ELEMENT )
631562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
632562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	firstChild = lastChild = 0;
633562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	copy.CopyTo( this );
634562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
635562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
636562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
6370238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albertvoid TiXmlElement::operator=( const TiXmlElement& base )
638562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
639562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	ClearThis();
640562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	base.CopyTo( this );
641562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
642562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
643562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
644562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlElement::~TiXmlElement()
645562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
646562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	ClearThis();
647562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
648562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
649562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
650562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid TiXmlElement::ClearThis()
651562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
652562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	Clear();
653562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	while( attributeSet.First() )
654562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
655562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		TiXmlAttribute* node = attributeSet.First();
656562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		attributeSet.Remove( node );
657562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		delete node;
658562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
659562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
660562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
661562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
6620238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albertconst char * TiXmlElement::Attribute( const char * name ) const
663562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
664562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	const TiXmlAttribute* node = attributeSet.Find( name );
6650238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert
666562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( node )
667562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		return node->Value();
668562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
669562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return 0;
670562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
671562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
672562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
6730238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albertconst char * TiXmlElement::Attribute( const char * name, int* i ) const
674562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
6750238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	const char * s = Attribute( name );
6760238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	if ( i )
6770238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	{
6780238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		if ( s )
6790238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert			*i = atoi( s );
6800238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		else
6810238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert			*i = 0;
682c3bbea3c3cfee4908189a57b3fc54f105b78c59bDan Albert	}
6830238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	return s;
684c3bbea3c3cfee4908189a57b3fc54f105b78c59bDan Albert}
685c3bbea3c3cfee4908189a57b3fc54f105b78c59bDan Albert
686c3bbea3c3cfee4908189a57b3fc54f105b78c59bDan Albert
6870238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albertconst char * TiXmlElement::Attribute( const char * name, double* d ) const
688c3bbea3c3cfee4908189a57b3fc54f105b78c59bDan Albert{
6890238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	const char * s = Attribute( name );
6900238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	if ( d )
6910238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	{
6920238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		if ( s )
6930238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert			*d = atof( s );
6940238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		else
6950238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert			*d = 0;
696562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
6970238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	return s;
698562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
699562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
700562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
701562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectint TiXmlElement::QueryIntAttribute( const char* name, int* ival ) const
702562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
703562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	const TiXmlAttribute* node = attributeSet.Find( name );
704562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( !node )
705562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		return TIXML_NO_ATTRIBUTE;
706562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
7070238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	return node->QueryIntValue( ival );
708562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
709562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
710562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
7110238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albertint TiXmlElement::QueryDoubleAttribute( const char* name, double* dval ) const
712562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
713562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	const TiXmlAttribute* node = attributeSet.Find( name );
714562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( !node )
715562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		return TIXML_NO_ATTRIBUTE;
716562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
7170238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	return node->QueryDoubleValue( dval );
718562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
719562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
720562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
721562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid TiXmlElement::SetAttribute( const char * name, int val )
722562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
7230238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	char buf[64];
7240238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	#if defined(TIXML_SNPRINTF)
7250238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		TIXML_SNPRINTF( buf, sizeof(buf), "%d", val );
7260238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	#else
7270238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		sprintf( buf, "%d", val );
7280238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	#endif
7290238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	SetAttribute( name, buf );
730562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
731562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
732562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
733562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid TiXmlElement::SetDoubleAttribute( const char * name, double val )
734562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
7350238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	char buf[256];
7360238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	#if defined(TIXML_SNPRINTF)
7370238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		TIXML_SNPRINTF( buf, sizeof(buf), "%f", val );
7380238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	#else
7390238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		sprintf( buf, "%f", val );
7400238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	#endif
7410238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	SetAttribute( name, buf );
742c3bbea3c3cfee4908189a57b3fc54f105b78c59bDan Albert}
743562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
744c3bbea3c3cfee4908189a57b3fc54f105b78c59bDan Albert
7450238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albertvoid TiXmlElement::SetAttribute( const char * name, const char * _value )
746c3bbea3c3cfee4908189a57b3fc54f105b78c59bDan Albert{
7470238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	TiXmlAttribute* node = attributeSet.Find( name );
7480238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	if ( node )
7490238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	{
7500238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		node->SetValue( _value );
7510238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		return;
752562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
753c3bbea3c3cfee4908189a57b3fc54f105b78c59bDan Albert
7540238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	TiXmlAttribute* attrib = new TiXmlAttribute( name, _value );
7550238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	if ( attrib )
7560238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	{
7570238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		attributeSet.Add( attrib );
7580238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	}
7590238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	else
7600238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	{
7610238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		TiXmlDocument* document = GetDocument();
7620238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		if ( document ) document->SetError( TIXML_ERROR_OUT_OF_MEMORY, 0, 0, TIXML_ENCODING_UNKNOWN );
763562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
764562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
765562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
766562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid TiXmlElement::Print( FILE* cfile, int depth ) const
767562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
768562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	int i;
7690238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	for ( i=0; i<depth; i++ )
7700238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	{
771562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		fprintf( cfile, "    " );
772562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
773562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
774562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	fprintf( cfile, "<%s", value.c_str() );
775562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
776562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	const TiXmlAttribute* attrib;
777562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	for ( attrib = attributeSet.First(); attrib; attrib = attrib->Next() )
778562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
779562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		fprintf( cfile, " " );
780562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		attrib->Print( cfile, depth );
781562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
782562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
783562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	// There are 3 different formatting approaches:
784562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	// 1) An element without children is printed as a <foo /> node
785562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	// 2) An element with only a text child is printed as <foo> text </foo>
786562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	// 3) An element with children is printed on multiple lines.
787562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlNode* node;
788562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( !firstChild )
789562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
790562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		fprintf( cfile, " />" );
791562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
792562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	else if ( firstChild == lastChild && firstChild->ToText() )
793562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
794562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		fprintf( cfile, ">" );
795562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		firstChild->Print( cfile, depth + 1 );
796562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		fprintf( cfile, "</%s>", value.c_str() );
797562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
798562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	else
799562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
800562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		fprintf( cfile, ">" );
801562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
802562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		for ( node = firstChild; node; node=node->NextSibling() )
803562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		{
804562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			if ( !node->ToText() )
805562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			{
806562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project				fprintf( cfile, "\n" );
807562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			}
808562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			node->Print( cfile, depth+1 );
809562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		}
810562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		fprintf( cfile, "\n" );
8110238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		for( i=0; i<depth; ++i )
8120238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		fprintf( cfile, "    " );
813c3bbea3c3cfee4908189a57b3fc54f105b78c59bDan Albert		fprintf( cfile, "</%s>", value.c_str() );
814562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
815562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
816562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
8170238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albertvoid TiXmlElement::StreamOut( TIXML_OSTREAM * stream ) const
8180238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert{
8190238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	(*stream) << "<" << value;
8200238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert
8210238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	const TiXmlAttribute* attrib;
8220238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	for ( attrib = attributeSet.First(); attrib; attrib = attrib->Next() )
8230238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	{
8240238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		(*stream) << " ";
8250238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		attrib->StreamOut( stream );
8260238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	}
8270238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert
8280238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	// If this node has children, give it a closing tag. Else
8290238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	// make it an empty tag.
8300238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	TiXmlNode* node;
8310238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	if ( firstChild )
8320238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	{
8330238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		(*stream) << ">";
8340238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert
8350238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		for ( node = firstChild; node; node=node->NextSibling() )
8360238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		{
8370238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert			node->StreamOut( stream );
8380238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		}
8390238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		(*stream) << "</" << value << ">";
8400238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	}
8410238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	else
8420238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	{
8430238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		(*stream) << " />";
8440238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	}
8450238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert}
8460238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert
847562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
848562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid TiXmlElement::CopyTo( TiXmlElement* target ) const
849562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
850562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	// superclass:
851562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlNode::CopyTo( target );
852562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
853562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	// Element class:
854562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	// Clone the attributes, then clone the children.
855562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	const TiXmlAttribute* attribute = 0;
856562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	for(	attribute = attributeSet.First();
857562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	attribute;
858562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	attribute = attribute->Next() )
859562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
860562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		target->SetAttribute( attribute->Name(), attribute->Value() );
861562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
862562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
863562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlNode* node = 0;
864562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	for ( node = firstChild; node; node = node->NextSibling() )
865562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
866562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		target->LinkEndChild( node->Clone() );
867562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
868562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
869562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
870562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
871562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlNode* TiXmlElement::Clone() const
872562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
873562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlElement* clone = new TiXmlElement( Value() );
874562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( !clone )
875562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		return 0;
876562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
877562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	CopyTo( clone );
878562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return clone;
879562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
880562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
881562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
882562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectconst char* TiXmlElement::GetText() const
883562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
884562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	const TiXmlNode* child = this->FirstChild();
885562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( child ) {
886562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		const TiXmlText* childText = child->ToText();
887562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		if ( childText ) {
888562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			return childText->Value();
889562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		}
890562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
891562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return 0;
892562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
893562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
894562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
8950238a20410cdb339709c983dede5fc43c0a3bdc4Dan AlbertTiXmlDocument::TiXmlDocument() : TiXmlNode( TiXmlNode::DOCUMENT )
896562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
897562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	tabsize = 4;
898562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	useMicrosoftBOM = false;
899562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	ClearError();
900562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
901562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
9020238a20410cdb339709c983dede5fc43c0a3bdc4Dan AlbertTiXmlDocument::TiXmlDocument( const char * documentName ) : TiXmlNode( TiXmlNode::DOCUMENT )
903562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
904562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	tabsize = 4;
905562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	useMicrosoftBOM = false;
906562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	value = documentName;
907562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	ClearError();
908562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
909562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
910562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
911562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#ifdef TIXML_USE_STL
9120238a20410cdb339709c983dede5fc43c0a3bdc4Dan AlbertTiXmlDocument::TiXmlDocument( const std::string& documentName ) : TiXmlNode( TiXmlNode::DOCUMENT )
913562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
914562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	tabsize = 4;
915562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	useMicrosoftBOM = false;
916562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project    value = documentName;
917562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	ClearError();
918562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
919562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#endif
920562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
921562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
9220238a20410cdb339709c983dede5fc43c0a3bdc4Dan AlbertTiXmlDocument::TiXmlDocument( const TiXmlDocument& copy ) : TiXmlNode( TiXmlNode::DOCUMENT )
923562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
924562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	copy.CopyTo( this );
925562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
926562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
927562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
9280238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albertvoid TiXmlDocument::operator=( const TiXmlDocument& copy )
929562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
930562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	Clear();
931562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	copy.CopyTo( this );
932562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
933562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
934562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
935562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectbool TiXmlDocument::LoadFile( TiXmlEncoding encoding )
936562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
9370238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	// See STL_STRING_BUG below.
9380238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	StringToBuffer buf( value );
939562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
9400238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	if ( buf.buffer && LoadFile( buf.buffer, encoding ) )
9410238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		return true;
942562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
9430238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	return false;
944c3bbea3c3cfee4908189a57b3fc54f105b78c59bDan Albert}
945562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
9460238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert
9470238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albertbool TiXmlDocument::SaveFile() const
948c3bbea3c3cfee4908189a57b3fc54f105b78c59bDan Albert{
9490238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	// See STL_STRING_BUG below.
9500238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	StringToBuffer buf( value );
951562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
9520238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	if ( buf.buffer && SaveFile( buf.buffer ) )
9530238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		return true;
954c3bbea3c3cfee4908189a57b3fc54f105b78c59bDan Albert
9550238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	return false;
956562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
957562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
9580238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albertbool TiXmlDocument::LoadFile( const char* filename, TiXmlEncoding encoding )
959562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
960562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	// Delete the existing data:
961562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	Clear();
962562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	location.Clear();
963562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
9640238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	// There was a really terrifying little bug here. The code:
9650238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	//		value = filename
9660238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	// in the STL case, cause the assignment method of the std::string to
9670238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	// be called. What is strange, is that the std::string had the same
9680238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	// address as it's c_str() method, and so bad things happen. Looks
9690238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	// like a bug in the Microsoft STL implementation.
9700238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	// See STL_STRING_BUG above.
9710238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	// Fixed with the StringToBuffer class.
9720238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	value = filename;
9730238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert
9740238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	// reading in binary mode so that tinyxml can normalize the EOL
9750238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	FILE* file = fopen( value.c_str (), "rb" );
976562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
9770238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	if ( file )
978562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
9790238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		// Get the file size, so we can pre-allocate the string. HUGE speed impact.
9800238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		long length = 0;
9810238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		fseek( file, 0, SEEK_END );
9820238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		length = ftell( file );
9830238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		fseek( file, 0, SEEK_SET );
984562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
9850238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		// Strange case, but good to handle up front.
9860238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		if ( length == 0 )
9870238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		{
9880238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert			fclose( file );
9890238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert			return false;
9900238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		}
991562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
9920238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		// If we have a file, assume it is all one big XML file, and read it in.
9930238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		// The document parser may decide the document ends sooner than the entire file, however.
9940238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		TIXML_STRING data;
9950238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		data.reserve( length );
9960238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert
9970238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		// Subtle bug here. TinyXml did use fgets. But from the XML spec:
9980238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		// 2.11 End-of-Line Handling
9990238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		// <snip>
10000238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		// <quote>
10010238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		// ...the XML processor MUST behave as if it normalized all line breaks in external
10020238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		// parsed entities (including the document entity) on input, before parsing, by translating
10030238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		// both the two-character sequence #xD #xA and any #xD that is not followed by #xA to
10040238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		// a single #xA character.
10050238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		// </quote>
10060238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		//
10070238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		// It is not clear fgets does that, and certainly isn't clear it works cross platform.
10080238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		// Generally, you expect fgets to translate from the convention of the OS to the c/unix
10090238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		// convention, and not work generally.
10100238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert
10110238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		/*
10120238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		while( fgets( buf, sizeof(buf), file ) )
10130238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		{
10140238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert			data += buf;
10150238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		}
10160238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		*/
1017562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
10180238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		char* buf = new char[ length+1 ];
10190238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		buf[0] = 0;
1020562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
10210238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		if ( fread( buf, length, 1, file ) != 1 ) {
10220238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		//if ( fread( buf, 1, length, file ) != (size_t)length ) {
10230238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert			SetError( TIXML_ERROR_OPENING_FILE, 0, 0, TIXML_ENCODING_UNKNOWN );
10240238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert			fclose( file );
10250238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert			return false;
10260238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		}
10270238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		fclose( file );
1028562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
10290238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		const char* lastPos = buf;
10300238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		const char* p = buf;
10310238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert
10320238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		buf[length] = 0;
10330238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		while( *p ) {
10340238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert			assert( p < (buf+length) );
10350238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert			if ( *p == 0xa ) {
10360238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert				// Newline character. No special rules for this. Append all the characters
10370238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert				// since the last string, and include the newline.
10380238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert				data.append( lastPos, p-lastPos+1 );	// append, include the newline
10390238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert				++p;									// move past the newline
10400238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert				lastPos = p;							// and point to the new buffer (may be 0)
10410238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert				assert( p <= (buf+length) );
10420238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert			}
10430238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert			else if ( *p == 0xd ) {
10440238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert				// Carriage return. Append what we have so far, then
10450238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert				// handle moving forward in the buffer.
10460238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert				if ( (p-lastPos) > 0 ) {
10470238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert					data.append( lastPos, p-lastPos );	// do not add the CR
10480238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert				}
10490238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert				data += (char)0xa;						// a proper newline
10500238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert
10510238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert				if ( *(p+1) == 0xa ) {
10520238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert					// Carriage return - new line sequence
10530238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert					p += 2;
10540238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert					lastPos = p;
10550238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert					assert( p <= (buf+length) );
10560238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert				}
10570238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert				else {
10580238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert					// it was followed by something else...that is presumably characters again.
10590238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert					++p;
10600238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert					lastPos = p;
10610238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert					assert( p <= (buf+length) );
10620238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert				}
10630238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert			}
10640238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert			else {
10650238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert				++p;
1066562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			}
1067562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		}
10680238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		// Handle any left over characters.
10690238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		if ( p-lastPos ) {
10700238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert			data.append( lastPos, p-lastPos );
10710238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		}
10720238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		delete [] buf;
10730238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		buf = 0;
1074562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
10750238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		Parse( data.c_str(), 0, encoding );
1076562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
10770238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		if (  Error() )
10780238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert            return false;
10790238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert        else
10800238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert			return true;
10810238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	}
10820238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	SetError( TIXML_ERROR_OPENING_FILE, 0, 0, TIXML_ENCODING_UNKNOWN );
10830238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	return false;
1084562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1085562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1086562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectbool TiXmlDocument::SaveFile( const char * filename ) const
1087562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1088562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	// The old c stuff lives on...
10890238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	FILE* fp = fopen( filename, "w" );
1090562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( fp )
1091562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
10920238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		if ( useMicrosoftBOM )
10930238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		{
10940238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert			const unsigned char TIXML_UTF_LEAD_0 = 0xefU;
10950238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert			const unsigned char TIXML_UTF_LEAD_1 = 0xbbU;
10960238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert			const unsigned char TIXML_UTF_LEAD_2 = 0xbfU;
10970238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert
10980238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert			fputc( TIXML_UTF_LEAD_0, fp );
10990238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert			fputc( TIXML_UTF_LEAD_1, fp );
11000238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert			fputc( TIXML_UTF_LEAD_2, fp );
11010238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		}
11020238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		Print( fp, 0 );
1103562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		fclose( fp );
11040238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		return true;
1105562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
1106562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return false;
1107562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1108562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1109562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1110562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid TiXmlDocument::CopyTo( TiXmlDocument* target ) const
1111562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1112562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlNode::CopyTo( target );
1113562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1114562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	target->error = error;
11150238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	target->errorDesc = errorDesc.c_str ();
1116562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1117562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlNode* node = 0;
1118562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	for ( node = firstChild; node; node = node->NextSibling() )
1119562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
1120562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		target->LinkEndChild( node->Clone() );
1121562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
1122562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1123562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1124562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1125562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlNode* TiXmlDocument::Clone() const
1126562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1127562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlDocument* clone = new TiXmlDocument();
1128562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( !clone )
1129562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		return 0;
1130562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1131562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	CopyTo( clone );
1132562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return clone;
1133562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1134562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1135562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1136562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid TiXmlDocument::Print( FILE* cfile, int depth ) const
1137562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
11380238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	const TiXmlNode* node;
11390238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	for ( node=FirstChild(); node; node=node->NextSibling() )
1140562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
1141562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		node->Print( cfile, depth );
1142562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		fprintf( cfile, "\n" );
1143562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
1144562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1145562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
11460238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albertvoid TiXmlDocument::StreamOut( TIXML_OSTREAM * out ) const
1147562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
11480238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	const TiXmlNode* node;
11490238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	for ( node=FirstChild(); node; node=node->NextSibling() )
1150562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
11510238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		node->StreamOut( out );
11520238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert
11530238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		// Special rule for streams: stop after the root element.
11540238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		// The stream in code will only read one element, so don't
11550238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		// write more than one.
11560238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		if ( node->ToElement() )
11570238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert			break;
1158562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
1159562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1160562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1161562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1162562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectconst TiXmlAttribute* TiXmlAttribute::Next() const
1163562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1164562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	// We are using knowledge of the sentinel. The sentinel
1165562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	// have a value or name.
1166562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( next->value.empty() && next->name.empty() )
1167562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		return 0;
1168562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return next;
1169562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1170562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1171562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlAttribute* TiXmlAttribute::Next()
1172562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1173562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	// We are using knowledge of the sentinel. The sentinel
1174562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	// have a value or name.
1175562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( next->value.empty() && next->name.empty() )
1176562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		return 0;
1177562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return next;
1178562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1179562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1180562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectconst TiXmlAttribute* TiXmlAttribute::Previous() const
1181562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1182562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	// We are using knowledge of the sentinel. The sentinel
1183562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	// have a value or name.
1184562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( prev->value.empty() && prev->name.empty() )
1185562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		return 0;
1186562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return prev;
1187562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1188562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1189562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlAttribute* TiXmlAttribute::Previous()
1190562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1191562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	// We are using knowledge of the sentinel. The sentinel
1192562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	// have a value or name.
1193562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( prev->value.empty() && prev->name.empty() )
1194562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		return 0;
1195562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return prev;
1196562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1197562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
11980238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albertvoid TiXmlAttribute::Print( FILE* cfile, int /*depth*/ ) const
1199562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1200562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TIXML_STRING n, v;
1201562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
12020238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	PutString( name, &n );
12030238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	PutString( value, &v );
1204562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
12050238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	if (value.find ('\"') == TIXML_STRING::npos)
12060238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		fprintf (cfile, "%s=\"%s\"", n.c_str(), v.c_str() );
12070238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	else
12080238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		fprintf (cfile, "%s='%s'", n.c_str(), v.c_str() );
12090238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert}
12100238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert
12110238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert
12120238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albertvoid TiXmlAttribute::StreamOut( TIXML_OSTREAM * stream ) const
12130238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert{
12140238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	if (value.find( '\"' ) != TIXML_STRING::npos)
12150238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	{
12160238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		PutString( name, stream );
12170238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		(*stream) << "=" << "'";
12180238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		PutString( value, stream );
12190238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		(*stream) << "'";
1220562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
12210238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	else
12220238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	{
12230238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		PutString( name, stream );
12240238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		(*stream) << "=" << "\"";
12250238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		PutString( value, stream );
12260238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		(*stream) << "\"";
1227562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
1228562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1229562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1230562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectint TiXmlAttribute::QueryIntValue( int* ival ) const
1231562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
12320238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	if ( sscanf( value.c_str(), "%d", ival ) == 1 )
1233562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		return TIXML_SUCCESS;
1234562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return TIXML_WRONG_TYPE;
1235562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1236562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1237562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectint TiXmlAttribute::QueryDoubleValue( double* dval ) const
1238562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
12390238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	if ( sscanf( value.c_str(), "%lf", dval ) == 1 )
1240562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		return TIXML_SUCCESS;
1241562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return TIXML_WRONG_TYPE;
1242562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1243562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1244562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid TiXmlAttribute::SetIntValue( int _value )
1245562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1246562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	char buf [64];
1247562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	#if defined(TIXML_SNPRINTF)
1248562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		TIXML_SNPRINTF(buf, sizeof(buf), "%d", _value);
1249562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	#else
1250562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		sprintf (buf, "%d", _value);
1251562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	#endif
1252562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	SetValue (buf);
1253562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1254562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1255562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid TiXmlAttribute::SetDoubleValue( double _value )
1256562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1257562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	char buf [256];
1258562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	#if defined(TIXML_SNPRINTF)
12590238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		TIXML_SNPRINTF( buf, sizeof(buf), "%lf", _value);
1260562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	#else
12610238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		sprintf (buf, "%lf", _value);
1262562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	#endif
1263562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	SetValue (buf);
1264562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1265562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1266562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectint TiXmlAttribute::IntValue() const
1267562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1268562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return atoi (value.c_str ());
1269562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1270562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1271562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectdouble  TiXmlAttribute::DoubleValue() const
1272562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1273562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return atof (value.c_str ());
1274562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1275562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1276562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
12770238a20410cdb339709c983dede5fc43c0a3bdc4Dan AlbertTiXmlComment::TiXmlComment( const TiXmlComment& copy ) : TiXmlNode( TiXmlNode::COMMENT )
1278562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1279562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	copy.CopyTo( this );
1280562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1281562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1282562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
12830238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albertvoid TiXmlComment::operator=( const TiXmlComment& base )
1284562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1285562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	Clear();
1286562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	base.CopyTo( this );
1287562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1288562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1289562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1290562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid TiXmlComment::Print( FILE* cfile, int depth ) const
1291562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1292562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	for ( int i=0; i<depth; i++ )
1293562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
12940238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		fputs( "    ", cfile );
1295562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
1296562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	fprintf( cfile, "<!--%s-->", value.c_str() );
1297562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1298562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
12990238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albertvoid TiXmlComment::StreamOut( TIXML_OSTREAM * stream ) const
1300562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
13010238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	(*stream) << "<!--";
13020238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	//PutString( value, stream );
13030238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	(*stream) << value;
13040238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	(*stream) << "-->";
1305562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1306562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1307562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
13080238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albertvoid TiXmlComment::CopyTo( TiXmlComment* target ) const
1309562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
13100238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	TiXmlNode::CopyTo( target );
1311562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1312562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1313562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1314562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlNode* TiXmlComment::Clone() const
1315562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1316562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlComment* clone = new TiXmlComment();
1317562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1318562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( !clone )
1319562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		return 0;
1320562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1321562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	CopyTo( clone );
1322562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return clone;
1323562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1324562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1325562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1326562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid TiXmlText::Print( FILE* cfile, int depth ) const
1327562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1328562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( cdata )
1329562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
1330562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		int i;
1331562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		fprintf( cfile, "\n" );
1332562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		for ( i=0; i<depth; i++ ) {
1333562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			fprintf( cfile, "    " );
1334562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		}
13350238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		fprintf( cfile, "<![CDATA[\n" );
13360238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert
13370238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		fprintf( cfile, "%s", value.c_str() );	// unformatted output
13380238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert
13390238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		fprintf( cfile, "\n" );
13400238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		for ( i=0; i<depth; i++ ) {
13410238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert			fprintf( cfile, "    " );
13420238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		}
13430238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		fprintf( cfile, "]]>\n" );
1344562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
1345562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	else
1346562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
1347562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		TIXML_STRING buffer;
13480238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		PutString( value, &buffer );
1349562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		fprintf( cfile, "%s", buffer.c_str() );
1350562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
1351562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1352562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1353562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
13540238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albertvoid TiXmlText::StreamOut( TIXML_OSTREAM * stream ) const
1355562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
13560238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	if ( cdata )
13570238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	{
13580238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		(*stream) << "<![CDATA[" << value << "]]>";
13590238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	}
13600238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	else
13610238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	{
13620238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		PutString( value, stream );
13630238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	}
1364562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1365562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1366562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
13670238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albertvoid TiXmlText::CopyTo( TiXmlText* target ) const
1368562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
13690238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	TiXmlNode::CopyTo( target );
13700238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	target->cdata = cdata;
1371562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1372562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1373562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1374562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlNode* TiXmlText::Clone() const
1375562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1376562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlText* clone = 0;
1377562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	clone = new TiXmlText( "" );
1378562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1379562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( !clone )
1380562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		return 0;
1381562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1382562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	CopyTo( clone );
1383562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return clone;
1384562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1385562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1386562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1387562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlDeclaration::TiXmlDeclaration( const char * _version,
1388562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project									const char * _encoding,
1389562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project									const char * _standalone )
13900238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	: TiXmlNode( TiXmlNode::DECLARATION )
1391562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1392562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	version = _version;
1393562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	encoding = _encoding;
1394562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	standalone = _standalone;
1395562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1396562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1397562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1398562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#ifdef TIXML_USE_STL
1399562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlDeclaration::TiXmlDeclaration(	const std::string& _version,
1400562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project									const std::string& _encoding,
1401562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project									const std::string& _standalone )
14020238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	: TiXmlNode( TiXmlNode::DECLARATION )
1403562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1404562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	version = _version;
1405562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	encoding = _encoding;
1406562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	standalone = _standalone;
1407562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1408562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#endif
1409562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1410562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1411562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlDeclaration::TiXmlDeclaration( const TiXmlDeclaration& copy )
14120238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	: TiXmlNode( TiXmlNode::DECLARATION )
1413562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1414562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	copy.CopyTo( this );
1415562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1416562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1417562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
14180238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albertvoid TiXmlDeclaration::operator=( const TiXmlDeclaration& copy )
1419562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1420562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	Clear();
1421562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	copy.CopyTo( this );
1422562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1423562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1424562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
14250238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albertvoid TiXmlDeclaration::Print( FILE* cfile, int /*depth*/ ) const
14260238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert{
14270238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	fprintf (cfile, "<?xml ");
14280238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert
14290238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	if ( !version.empty() )
14300238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		fprintf (cfile, "version=\"%s\" ", version.c_str ());
14310238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	if ( !encoding.empty() )
14320238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		fprintf (cfile, "encoding=\"%s\" ", encoding.c_str ());
14330238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	if ( !standalone.empty() )
14340238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		fprintf (cfile, "standalone=\"%s\" ", standalone.c_str ());
14350238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	fprintf (cfile, "?>");
14360238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert}
14370238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert
14380238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albertvoid TiXmlDeclaration::StreamOut( TIXML_OSTREAM * stream ) const
1439562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
14400238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	(*stream) << "<?xml ";
1441562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
14420238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	if ( !version.empty() )
14430238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	{
14440238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		(*stream) << "version=\"";
14450238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		PutString( version, stream );
14460238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		(*stream) << "\" ";
1447562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
14480238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	if ( !encoding.empty() )
14490238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	{
14500238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		(*stream) << "encoding=\"";
14510238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		PutString( encoding, stream );
14520238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		(*stream ) << "\" ";
1453562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
14540238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	if ( !standalone.empty() )
14550238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	{
14560238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		(*stream) << "standalone=\"";
14570238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		PutString( standalone, stream );
14580238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		(*stream) << "\" ";
1459562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
14600238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	(*stream) << "?>";
1461562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1462562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1463562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1464562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid TiXmlDeclaration::CopyTo( TiXmlDeclaration* target ) const
1465562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1466562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlNode::CopyTo( target );
1467562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1468562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	target->version = version;
1469562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	target->encoding = encoding;
1470562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	target->standalone = standalone;
1471562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1472562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1473562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1474562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlNode* TiXmlDeclaration::Clone() const
1475562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1476562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlDeclaration* clone = new TiXmlDeclaration();
1477562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1478562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( !clone )
1479562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		return 0;
1480562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1481562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	CopyTo( clone );
1482562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return clone;
1483562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1484562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1485562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1486562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid TiXmlUnknown::Print( FILE* cfile, int depth ) const
1487562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1488562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	for ( int i=0; i<depth; i++ )
1489562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		fprintf( cfile, "    " );
1490562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	fprintf( cfile, "<%s>", value.c_str() );
1491562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1492562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1493562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
14940238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albertvoid TiXmlUnknown::StreamOut( TIXML_OSTREAM * stream ) const
1495562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
14960238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	(*stream) << "<" << value << ">";		// Don't use entities here! It is unknown.
1497562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1498562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1499562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
15000238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albertvoid TiXmlUnknown::CopyTo( TiXmlUnknown* target ) const
1501562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
15020238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	TiXmlNode::CopyTo( target );
1503562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1504562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1505562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1506562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlNode* TiXmlUnknown::Clone() const
1507562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1508562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlUnknown* clone = new TiXmlUnknown();
1509562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1510562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( !clone )
1511562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		return 0;
1512562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1513562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	CopyTo( clone );
1514562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return clone;
1515562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1516562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1517562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1518562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlAttributeSet::TiXmlAttributeSet()
1519562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1520562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	sentinel.next = &sentinel;
1521562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	sentinel.prev = &sentinel;
1522562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1523562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1524562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1525562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlAttributeSet::~TiXmlAttributeSet()
1526562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1527562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	assert( sentinel.next == &sentinel );
1528562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	assert( sentinel.prev == &sentinel );
1529562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1530562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1531562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1532562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid TiXmlAttributeSet::Add( TiXmlAttribute* addMe )
1533562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1534562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	assert( !Find( addMe->Name() ) );	// Shouldn't be multiply adding to the set.
1535562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1536562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	addMe->next = &sentinel;
1537562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	addMe->prev = sentinel.prev;
1538562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1539562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	sentinel.prev->next = addMe;
1540562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	sentinel.prev      = addMe;
1541562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1542562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1543562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid TiXmlAttributeSet::Remove( TiXmlAttribute* removeMe )
1544562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1545562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlAttribute* node;
1546562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1547562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	for( node = sentinel.next; node != &sentinel; node = node->next )
1548562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
1549562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		if ( node == removeMe )
1550562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		{
1551562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			node->prev->next = node->next;
1552562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			node->next->prev = node->prev;
1553562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			node->next = 0;
1554562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			node->prev = 0;
1555562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			return;
1556562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		}
1557562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
1558562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	assert( 0 );		// we tried to remove a non-linked attribute.
1559562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1560562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
15610238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albertconst TiXmlAttribute* TiXmlAttributeSet::Find( const char * name ) const
1562c3bbea3c3cfee4908189a57b3fc54f105b78c59bDan Albert{
15630238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	const TiXmlAttribute* node;
15640238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert
15650238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	for( node = sentinel.next; node != &sentinel; node = node->next )
1566562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
1567562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		if ( node->name == name )
1568562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			return node;
1569562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
1570562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return 0;
1571562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1572562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
15730238a20410cdb339709c983dede5fc43c0a3bdc4Dan AlbertTiXmlAttribute*	TiXmlAttributeSet::Find( const char * name )
1574562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
15750238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	TiXmlAttribute* node;
1576c3bbea3c3cfee4908189a57b3fc54f105b78c59bDan Albert
15770238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	for( node = sentinel.next; node != &sentinel; node = node->next )
1578562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
15790238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert		if ( node->name == name )
1580562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			return node;
1581562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
1582562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return 0;
1583562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1584562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1585562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#ifdef TIXML_USE_STL
15860238a20410cdb339709c983dede5fc43c0a3bdc4Dan AlbertTIXML_ISTREAM & operator >> (TIXML_ISTREAM & in, TiXmlNode & base)
1587562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1588562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TIXML_STRING tag;
1589562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	tag.reserve( 8 * 1000 );
1590562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	base.StreamIn( &in, &tag );
1591562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1592562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	base.Parse( tag.c_str(), 0, TIXML_DEFAULT_ENCODING );
1593562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return in;
1594562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1595562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#endif
1596562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1597562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
15980238a20410cdb339709c983dede5fc43c0a3bdc4Dan AlbertTIXML_OSTREAM & operator<< (TIXML_OSTREAM & out, const TiXmlNode & base)
1599562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
16000238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert	base.StreamOut (& out);
1601562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return out;
1602562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1603562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1604562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
16050238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert#ifdef TIXML_USE_STL
16060238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albertstd::string & operator<< (std::string& out, const TiXmlNode& base )
1607562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
16080238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert   std::ostringstream os_stream( std::ostringstream::out );
16090238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert   base.StreamOut( &os_stream );
16100238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert
16110238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert   out.append( os_stream.str() );
16120238a20410cdb339709c983dede5fc43c0a3bdc4Dan Albert   return out;
1613562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1614562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#endif
1615562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1616562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1617562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlHandle TiXmlHandle::FirstChild() const
1618562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1619562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( node )
1620562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
1621562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		TiXmlNode* child = node->FirstChild();
1622562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		if ( child )
1623562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			return TiXmlHandle( child );
1624562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
1625562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return TiXmlHandle( 0 );
1626562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1627562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1628562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1629562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlHandle TiXmlHandle::FirstChild( const char * value ) const
1630562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1631562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( node )
1632562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
1633562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		TiXmlNode* child = node->FirstChild( value );
1634562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		if ( child )
1635562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			return TiXmlHandle( child );
1636562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
1637562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return TiXmlHandle( 0 );
1638562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1639562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1640562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1641562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlHandle TiXmlHandle::FirstChildElement() const
1642562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1643562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( node )
1644562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
1645562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		TiXmlElement* child = node->FirstChildElement();
1646562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		if ( child )
1647562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			return TiXmlHandle( child );
1648562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
1649562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return TiXmlHandle( 0 );
1650562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1651562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1652562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1653562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlHandle TiXmlHandle::FirstChildElement( const char * value ) const
1654562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1655562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( node )
1656562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
1657562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		TiXmlElement* child = node->FirstChildElement( value );
1658562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		if ( child )
1659562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			return TiXmlHandle( child );
1660562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
1661562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return TiXmlHandle( 0 );
1662562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1663562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1664562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1665562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlHandle TiXmlHandle::Child( int count ) const
1666562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1667562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( node )
1668562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
1669562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		int i;
1670562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		TiXmlNode* child = node->FirstChild();
1671562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		for (	i=0;
1672562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project				child && i<count;
1673562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project				child = child->NextSibling(), ++i )
1674562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		{
1675562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			// nothing
1676562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		}
1677562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		if ( child )
1678562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			return TiXmlHandle( child );
1679562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
1680562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return TiXmlHandle( 0 );
1681562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1682562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1683562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1684562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlHandle TiXmlHandle::Child( const char* value, int count ) const
1685562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1686562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( node )
1687562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
1688562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		int i;
1689562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		TiXmlNode* child = node->FirstChild( value );
1690562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		for (	i=0;
1691562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project				child && i<count;
1692562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project				child = child->NextSibling( value ), ++i )
1693562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		{
1694562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			// nothing
1695562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		}
1696562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		if ( child )
1697562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			return TiXmlHandle( child );
1698562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
1699562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return TiXmlHandle( 0 );
1700562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1701562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1702562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1703562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlHandle TiXmlHandle::ChildElement( int count ) const
1704562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1705562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( node )
1706562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
1707562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		int i;
1708562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		TiXmlElement* child = node->FirstChildElement();
1709562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		for (	i=0;
1710562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project				child && i<count;
1711562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project				child = child->NextSiblingElement(), ++i )
1712562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		{
1713562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			// nothing
1714562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		}
1715562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		if ( child )
1716562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			return TiXmlHandle( child );
1717562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
1718562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return TiXmlHandle( 0 );
1719562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1720562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1721562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1722562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlHandle TiXmlHandle::ChildElement( const char* value, int count ) const
1723562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1724562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( node )
1725562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
1726562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		int i;
1727562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		TiXmlElement* child = node->FirstChildElement( value );
1728562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		for (	i=0;
1729562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project				child && i<count;
1730562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project				child = child->NextSiblingElement( value ), ++i )
1731562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		{
1732562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			// nothing
1733562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		}
1734562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		if ( child )
1735562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			return TiXmlHandle( child );
1736562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
1737562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return TiXmlHandle( 0 );
1738562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1739