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