1562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project/*
2562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectwww.sourceforge.net/projects/tinyxml
3562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectOriginal 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>
26562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#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
35562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid TiXmlBase::PutString( const TIXML_STRING& str, TIXML_OSTREAM* stream )
36562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
37562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TIXML_STRING buffer;
38562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	PutString( str, &buffer );
39562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	(*stream) << buffer;
40562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
41562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
42562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid 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
126562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project// <-- Strange class for a bug fix. Search for STL_STRING_BUG
127562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlBase::StringToBuffer::StringToBuffer( const TIXML_STRING& str )
128562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
129562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	buffer = new char[ str.length()+1 ];
130562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( buffer )
131562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
132562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		strcpy( buffer, str.c_str() );
133562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
134562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
135562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
136562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
137562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlBase::StringToBuffer::~StringToBuffer()
138562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
139562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	delete [] buffer;
140562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
141562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project// End strange bug fix. -->
142562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
143562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
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{
222562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	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{
248562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	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
334562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlNode* TiXmlNode::FirstChild( const char * _value )
335562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
336562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlNode* node;
337562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	for ( node = firstChild; node; node = node->next )
338562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
339562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		if ( strcmp( node->Value(), _value ) == 0 )
340562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			return node;
341562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
342562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return 0;
343562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
344562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
345562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
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
357562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlNode* TiXmlNode::LastChild( const char * _value )
358562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
359562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlNode* node;
360562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	for ( node = lastChild; node; node = node->prev )
361562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
362562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		if ( strcmp( node->Value(), _value ) == 0 )
363562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			return node;
364562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
365562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return 0;
366562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
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
381562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlNode* TiXmlNode::IterateChildren( TiXmlNode* previous )
382562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
383562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( !previous )
384562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
385562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		return FirstChild();
386562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
387562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	else
388562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
389562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		assert( previous->parent == this );
390562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		return previous->NextSibling();
391562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
392562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
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
407562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlNode* TiXmlNode::IterateChildren( const char * val, TiXmlNode* previous )
408562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
409562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( !previous )
410562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
411562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		return FirstChild( val );
412562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
413562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	else
414562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
415562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		assert( previous->parent == this );
416562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		return previous->NextSibling( val );
417562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
418562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
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
431562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlNode* TiXmlNode::NextSibling( const char * _value )
432562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
433562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlNode* node;
434562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	for ( node = next; node; node = node->next )
435562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
436562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		if ( strcmp( node->Value(), _value ) == 0 )
437562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			return node;
438562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
439562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return 0;
440562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
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
453562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlNode* TiXmlNode::PreviousSibling( const char * _value )
454562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
455562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlNode* node;
456562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	for ( node = prev; node; node = node->prev )
457562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
458562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		if ( strcmp( node->Value(), _value ) == 0 )
459562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			return node;
460562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
461562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return 0;
462562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
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
488562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlElement* TiXmlNode::FirstChildElement()
489562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
490562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlNode* node;
491562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
492562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	for (	node = FirstChild();
493562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			node;
494562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			node = node->NextSibling() )
495562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
496562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		if ( node->ToElement() )
497562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			return node->ToElement();
498562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
499562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return 0;
500562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
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
516562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlElement* TiXmlNode::FirstChildElement( const char * _value )
517562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
518562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlNode* node;
519562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
520562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	for (	node = FirstChild( _value );
521562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			node;
522562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			node = node->NextSibling( _value ) )
523562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
524562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		if ( node->ToElement() )
525562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			return node->ToElement();
526562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
527562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return 0;
528562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
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();
535562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	node;
536562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	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
544562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlElement* TiXmlNode::NextSiblingElement()
545562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
546562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlNode* node;
547562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
548562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	for (	node = NextSibling();
549562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	node;
550562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	node = node->NextSibling() )
551562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
552562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		if ( node->ToElement() )
553562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			return node->ToElement();
554562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
555562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return 0;
556562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
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 );
563562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	node;
564562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	node = node->NextSibling( _value ) )
565562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
566562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		if ( node->ToElement() )
567562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			return node->ToElement();
568562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
569562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return 0;
570562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
571562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
572562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlElement* TiXmlNode::NextSiblingElement( const char * _value )
573562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
574562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlNode* node;
575562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
576562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	for (	node = NextSibling( _value );
577562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	node;
578562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	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
599562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlDocument* TiXmlNode::GetDocument()
600562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
601562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlNode* node;
602562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
603562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	for( node = this; node; node = node->parent )
604562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
605562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		if ( node->ToDocument() )
606562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			return node->ToDocument();
607562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
608562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return 0;
609562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
610562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
611562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlElement::TiXmlElement (const char * _value)
612562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	: 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 )
621562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	: 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)
630562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	: 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
637562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid 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
662562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectconst char * TiXmlElement::Attribute( const char * name ) const
663562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
664562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	const TiXmlAttribute* node = attributeSet.Find( name );
665562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
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
673562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectconst char * TiXmlElement::Attribute( const char * name, int* i ) const
674562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
675562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	const char * s = Attribute( name );
676562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( i )
677562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
678562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		if ( s )
679562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			*i = atoi( s );
680562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		else
681562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			*i = 0;
682562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
683562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return s;
684562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
685562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
686562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
687562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectconst char * TiXmlElement::Attribute( const char * name, double* d ) const
688562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
689562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	const char * s = Attribute( name );
690562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( d )
691562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
692562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		if ( s )
693562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			*d = atof( s );
694562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		else
695562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			*d = 0;
696562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
697562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	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
707562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return node->QueryIntValue( ival );
708562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
709562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
710562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
711562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectint 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
717562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	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{
723562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	char buf[64];
724562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	#if defined(TIXML_SNPRINTF)
725562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		TIXML_SNPRINTF( buf, sizeof(buf), "%d", val );
726562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	#else
727562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		sprintf( buf, "%d", val );
728562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	#endif
729562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	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{
735562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	char buf[256];
736562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	#if defined(TIXML_SNPRINTF)
737562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		TIXML_SNPRINTF( buf, sizeof(buf), "%f", val );
738562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	#else
739562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		sprintf( buf, "%f", val );
740562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	#endif
741562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	SetAttribute( name, buf );
742562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
743562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
744562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
745562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid TiXmlElement::SetAttribute( const char * name, const char * _value )
746562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
747562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlAttribute* node = attributeSet.Find( name );
748562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( node )
749562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
750562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		node->SetValue( _value );
751562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		return;
752562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
753562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
754562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlAttribute* attrib = new TiXmlAttribute( name, _value );
755562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( attrib )
756562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
757562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		attributeSet.Add( attrib );
758562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
759562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	else
760562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
761562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		TiXmlDocument* document = GetDocument();
762562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		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;
769562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	for ( i=0; i<depth; i++ )
770562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
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" );
811562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		for( i=0; i<depth; ++i )
812562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		fprintf( cfile, "    " );
813562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		fprintf( cfile, "</%s>", value.c_str() );
814562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
815562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
816562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
817562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid TiXmlElement::StreamOut( TIXML_OSTREAM * stream ) const
818562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
819562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	(*stream) << "<" << value;
820562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
821562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	const TiXmlAttribute* attrib;
822562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	for ( attrib = attributeSet.First(); attrib; attrib = attrib->Next() )
823562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
824562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		(*stream) << " ";
825562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		attrib->StreamOut( stream );
826562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
827562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
828562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	// If this node has children, give it a closing tag. Else
829562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	// make it an empty tag.
830562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlNode* node;
831562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( firstChild )
832562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
833562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		(*stream) << ">";
834562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
835562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		for ( node = firstChild; node; node=node->NextSibling() )
836562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		{
837562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			node->StreamOut( stream );
838562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		}
839562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		(*stream) << "</" << value << ">";
840562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
841562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	else
842562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
843562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		(*stream) << " />";
844562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
845562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
846562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
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
895562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlDocument::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
902562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlDocument::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
912562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlDocument::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
922562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlDocument::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
928562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid 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{
937562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	// See STL_STRING_BUG below.
938562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	StringToBuffer buf( value );
939562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
940562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( buf.buffer && LoadFile( buf.buffer, encoding ) )
941562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		return true;
942562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
943562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return false;
944562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
945562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
946562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
947562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectbool TiXmlDocument::SaveFile() const
948562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
949562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	// See STL_STRING_BUG below.
950562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	StringToBuffer buf( value );
951562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
952562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( buf.buffer && SaveFile( buf.buffer ) )
953562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		return true;
954562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
955562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return false;
956562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
957562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
958562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectbool 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
964562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	// There was a really terrifying little bug here. The code:
965562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	//		value = filename
966562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	// in the STL case, cause the assignment method of the std::string to
967562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	// be called. What is strange, is that the std::string had the same
968562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	// address as it's c_str() method, and so bad things happen. Looks
969562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	// like a bug in the Microsoft STL implementation.
970562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	// See STL_STRING_BUG above.
971562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	// Fixed with the StringToBuffer class.
972562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	value = filename;
973562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
974562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	// reading in binary mode so that tinyxml can normalize the EOL
975562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	FILE* file = fopen( value.c_str (), "rb" );
976562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
977562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( file )
978562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
979562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		// Get the file size, so we can pre-allocate the string. HUGE speed impact.
980562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		long length = 0;
981562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		fseek( file, 0, SEEK_END );
982562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		length = ftell( file );
983562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		fseek( file, 0, SEEK_SET );
984562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
985562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		// Strange case, but good to handle up front.
986562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		if ( length == 0 )
987562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		{
988562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			fclose( file );
989562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			return false;
990562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		}
991562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
992562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		// If we have a file, assume it is all one big XML file, and read it in.
993562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		// The document parser may decide the document ends sooner than the entire file, however.
994562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		TIXML_STRING data;
995562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		data.reserve( length );
996562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
997562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		// Subtle bug here. TinyXml did use fgets. But from the XML spec:
998562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		// 2.11 End-of-Line Handling
999562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		// <snip>
1000562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		// <quote>
1001562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		// ...the XML processor MUST behave as if it normalized all line breaks in external
1002562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		// parsed entities (including the document entity) on input, before parsing, by translating
1003562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		// both the two-character sequence #xD #xA and any #xD that is not followed by #xA to
1004562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		// a single #xA character.
1005562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		// </quote>
1006562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		//
1007562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		// It is not clear fgets does that, and certainly isn't clear it works cross platform.
1008562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		// Generally, you expect fgets to translate from the convention of the OS to the c/unix
1009562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		// convention, and not work generally.
1010562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1011562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		/*
1012562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		while( fgets( buf, sizeof(buf), file ) )
1013562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		{
1014562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			data += buf;
1015562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		}
1016562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		*/
1017562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1018562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		char* buf = new char[ length+1 ];
1019562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		buf[0] = 0;
1020562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1021562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		if ( fread( buf, length, 1, file ) != 1 ) {
1022562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		//if ( fread( buf, 1, length, file ) != (size_t)length ) {
1023562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			SetError( TIXML_ERROR_OPENING_FILE, 0, 0, TIXML_ENCODING_UNKNOWN );
1024562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			fclose( file );
1025562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			return false;
1026562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		}
1027562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		fclose( file );
1028562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1029562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		const char* lastPos = buf;
1030562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		const char* p = buf;
1031562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1032562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		buf[length] = 0;
1033562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		while( *p ) {
1034562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			assert( p < (buf+length) );
1035562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			if ( *p == 0xa ) {
1036562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project				// Newline character. No special rules for this. Append all the characters
1037562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project				// since the last string, and include the newline.
1038562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project				data.append( lastPos, p-lastPos+1 );	// append, include the newline
1039562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project				++p;									// move past the newline
1040562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project				lastPos = p;							// and point to the new buffer (may be 0)
1041562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project				assert( p <= (buf+length) );
1042562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			}
1043562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			else if ( *p == 0xd ) {
1044562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project				// Carriage return. Append what we have so far, then
1045562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project				// handle moving forward in the buffer.
1046562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project				if ( (p-lastPos) > 0 ) {
1047562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project					data.append( lastPos, p-lastPos );	// do not add the CR
1048562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project				}
1049562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project				data += (char)0xa;						// a proper newline
1050562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1051562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project				if ( *(p+1) == 0xa ) {
1052562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project					// Carriage return - new line sequence
1053562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project					p += 2;
1054562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project					lastPos = p;
1055562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project					assert( p <= (buf+length) );
1056562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project				}
1057562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project				else {
1058562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project					// it was followed by something else...that is presumably characters again.
1059562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project					++p;
1060562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project					lastPos = p;
1061562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project					assert( p <= (buf+length) );
1062562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project				}
1063562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			}
1064562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			else {
1065562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project				++p;
1066562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			}
1067562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		}
1068562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		// Handle any left over characters.
1069562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		if ( p-lastPos ) {
1070562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			data.append( lastPos, p-lastPos );
1071562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		}
1072562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		delete [] buf;
1073562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		buf = 0;
1074562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1075562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		Parse( data.c_str(), 0, encoding );
1076562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1077562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		if (  Error() )
1078562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project            return false;
1079562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project        else
1080562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			return true;
1081562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
1082562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	SetError( TIXML_ERROR_OPENING_FILE, 0, 0, TIXML_ENCODING_UNKNOWN );
1083562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	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...
1089562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	FILE* fp = fopen( filename, "w" );
1090562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( fp )
1091562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
1092562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		if ( useMicrosoftBOM )
1093562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		{
1094562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			const unsigned char TIXML_UTF_LEAD_0 = 0xefU;
1095562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			const unsigned char TIXML_UTF_LEAD_1 = 0xbbU;
1096562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			const unsigned char TIXML_UTF_LEAD_2 = 0xbfU;
1097562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1098562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			fputc( TIXML_UTF_LEAD_0, fp );
1099562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			fputc( TIXML_UTF_LEAD_1, fp );
1100562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			fputc( TIXML_UTF_LEAD_2, fp );
1101562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		}
1102562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		Print( fp, 0 );
1103562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		fclose( fp );
1104562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		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;
1115562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	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{
1138562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	const TiXmlNode* node;
1139562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	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
1146562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid TiXmlDocument::StreamOut( TIXML_OSTREAM * out ) const
1147562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1148562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	const TiXmlNode* node;
1149562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	for ( node=FirstChild(); node; node=node->NextSibling() )
1150562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
1151562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		node->StreamOut( out );
1152562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1153562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		// Special rule for streams: stop after the root element.
1154562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		// The stream in code will only read one element, so don't
1155562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		// write more than one.
1156562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		if ( node->ToElement() )
1157562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			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
1198562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid 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
1202562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	PutString( name, &n );
1203562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	PutString( value, &v );
1204562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1205562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if (value.find ('\"') == TIXML_STRING::npos)
1206562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		fprintf (cfile, "%s=\"%s\"", n.c_str(), v.c_str() );
1207562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	else
1208562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		fprintf (cfile, "%s='%s'", n.c_str(), v.c_str() );
1209562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1210562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1211562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1212562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid TiXmlAttribute::StreamOut( TIXML_OSTREAM * stream ) const
1213562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1214562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if (value.find( '\"' ) != TIXML_STRING::npos)
1215562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
1216562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		PutString( name, stream );
1217562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		(*stream) << "=" << "'";
1218562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		PutString( value, stream );
1219562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		(*stream) << "'";
1220562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
1221562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	else
1222562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
1223562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		PutString( name, stream );
1224562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		(*stream) << "=" << "\"";
1225562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		PutString( value, stream );
1226562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		(*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{
1232562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	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{
1239562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	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)
1259562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		TIXML_SNPRINTF( buf, sizeof(buf), "%lf", _value);
1260562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	#else
1261562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		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
1277562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlComment::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
1283562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid 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	{
1294562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		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
1299562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid TiXmlComment::StreamOut( TIXML_OSTREAM * stream ) const
1300562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1301562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	(*stream) << "<!--";
1302562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	//PutString( value, stream );
1303562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	(*stream) << value;
1304562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	(*stream) << "-->";
1305562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1306562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1307562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1308562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid TiXmlComment::CopyTo( TiXmlComment* target ) const
1309562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1310562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	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		}
1335562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		fprintf( cfile, "<![CDATA[\n" );
1336562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1337562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		fprintf( cfile, "%s", value.c_str() );	// unformatted output
1338562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1339562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		fprintf( cfile, "\n" );
1340562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		for ( i=0; i<depth; i++ ) {
1341562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project			fprintf( cfile, "    " );
1342562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		}
1343562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		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;
1348562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		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
1354562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid TiXmlText::StreamOut( TIXML_OSTREAM * stream ) const
1355562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1356562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( cdata )
1357562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
1358562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		(*stream) << "<![CDATA[" << value << "]]>";
1359562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
1360562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	else
1361562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
1362562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		PutString( value, stream );
1363562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
1364562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1365562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1366562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1367562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid TiXmlText::CopyTo( TiXmlText* target ) const
1368562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1369562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlNode::CopyTo( target );
1370562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	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 )
1390562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	: 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 )
1402562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	: 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 )
1412562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	: 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
1418562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid 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
1425562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid TiXmlDeclaration::Print( FILE* cfile, int /*depth*/ ) const
1426562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1427562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	fprintf (cfile, "<?xml ");
1428562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1429562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( !version.empty() )
1430562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		fprintf (cfile, "version=\"%s\" ", version.c_str ());
1431562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( !encoding.empty() )
1432562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		fprintf (cfile, "encoding=\"%s\" ", encoding.c_str ());
1433562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( !standalone.empty() )
1434562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		fprintf (cfile, "standalone=\"%s\" ", standalone.c_str ());
1435562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	fprintf (cfile, "?>");
1436562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
1437562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1438562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid TiXmlDeclaration::StreamOut( TIXML_OSTREAM * stream ) const
1439562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1440562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	(*stream) << "<?xml ";
1441562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1442562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( !version.empty() )
1443562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
1444562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		(*stream) << "version=\"";
1445562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		PutString( version, stream );
1446562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		(*stream) << "\" ";
1447562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
1448562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( !encoding.empty() )
1449562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
1450562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		(*stream) << "encoding=\"";
1451562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		PutString( encoding, stream );
1452562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		(*stream ) << "\" ";
1453562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
1454562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if ( !standalone.empty() )
1455562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
1456562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		(*stream) << "standalone=\"";
1457562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		PutString( standalone, stream );
1458562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		(*stream) << "\" ";
1459562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
1460562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	(*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
1494562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid TiXmlUnknown::StreamOut( TIXML_OSTREAM * stream ) const
1495562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1496562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	(*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
1500562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid TiXmlUnknown::CopyTo( TiXmlUnknown* target ) const
1501562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1502562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	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
1561562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectconst TiXmlAttribute* TiXmlAttributeSet::Find( const char * name ) const
1562562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1563562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	const TiXmlAttribute* node;
1564562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1565562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	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
1573562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlAttribute*	TiXmlAttributeSet::Find( const char * name )
1574562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1575562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlAttribute* node;
1576562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1577562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	for( node = sentinel.next; node != &sentinel; node = node->next )
1578562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
1579562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		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
1586562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTIXML_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
1598562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTIXML_OSTREAM & operator<< (TIXML_OSTREAM & out, const TiXmlNode & base)
1599562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1600562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	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
1605562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#ifdef TIXML_USE_STL
1606562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectstd::string & operator<< (std::string& out, const TiXmlNode& base )
1607562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
1608562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project   std::ostringstream os_stream( std::ostringstream::out );
1609562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project   base.StreamOut( &os_stream );
1610562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
1611562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project   out.append( os_stream.str() );
1612562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project   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