1562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project/*
2562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectwww.sourceforge.net/projects/tinyxml
3562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectOriginal file by Yves Berquin.
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/*
26562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project * THIS FILE WAS ALTERED BY Tyge L�vset, 7. April 2005.
27562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project */
28562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
29562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
30562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#ifndef TIXML_USE_STL
31562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
32562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#include "tinystr.h"
33562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
34562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project// Error value for find primitive
35562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectconst TiXmlString::size_type TiXmlString::npos = static_cast< size_type >(-1);
36562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
37562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project// Null rep.
38562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlString::Rep TiXmlString::nullrep_ = { 0, 0, '\0' };
39562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
40562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
41562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectvoid TiXmlString::reserve (size_type cap)
42562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
43562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if (cap > capacity())
44562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
45562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		TiXmlString tmp;
46562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		tmp.init(length(), cap);
47562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		memcpy(tmp.start(), data(), length());
48562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		swap(tmp);
49562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
50562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
51562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
52562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
53562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlString& TiXmlString::assign(const char* str, size_type len)
54562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
55562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	size_type cap = capacity();
56562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if (len > cap || cap > 3*(len + 8))
57562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
58562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		TiXmlString tmp;
59562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		tmp.init(len);
60562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		memcpy(tmp.start(), str, len);
61562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		swap(tmp);
62562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
63562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	else
64562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
65562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		memmove(start(), str, len);
66562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		set_size(len);
67562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
68562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return *this;
69562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
70562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
71562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
72562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlString& TiXmlString::append(const char* str, size_type len)
73562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
74562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	size_type newsize = length() + len;
75562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	if (newsize > capacity())
76562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	{
77562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project		reserve (newsize + capacity());
78562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	}
79562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	memmove(finish(), str, len);
80562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	set_size(newsize);
81562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return *this;
82562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
83562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
84562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
85562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlString operator + (const TiXmlString & a, const TiXmlString & b)
86562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
87562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlString tmp;
88562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	tmp.reserve(a.length() + b.length());
89562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	tmp += a;
90562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	tmp += b;
91562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return tmp;
92562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
93562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
94562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlString operator + (const TiXmlString & a, const char* b)
95562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
96562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlString tmp;
97562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlString::size_type b_len = static_cast<TiXmlString::size_type>( strlen(b) );
98562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	tmp.reserve(a.length() + b_len);
99562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	tmp += a;
100562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	tmp.append(b, b_len);
101562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return tmp;
102562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
103562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
104562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source ProjectTiXmlString operator + (const char* a, const TiXmlString & b)
105562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{
106562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlString tmp;
107562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	TiXmlString::size_type a_len = static_cast<TiXmlString::size_type>( strlen(a) );
108562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	tmp.reserve(a_len + b.length());
109562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	tmp.append(a, a_len);
110562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	tmp += b;
111562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project	return tmp;
112562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project}
113562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
114562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project
115562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#endif	// TIXML_USE_STL
116