10c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com/* 20c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.comwww.sourceforge.net/projects/tinyxml 30c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com 40c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.comThis software is provided 'as-is', without any express or implied 50c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.comwarranty. In no event will the authors be held liable for any 60c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.comdamages arising from the use of this software. 70c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com 80c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.comPermission is granted to anyone to use this software for any 90c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.compurpose, including commercial applications, and to alter it and 100c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.comredistribute it freely, subject to the following restrictions: 110c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com 120c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com1. The origin of this software must not be misrepresented; you must 130c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.comnot claim that you wrote the original software. If you use this 140c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.comsoftware in a product, an acknowledgment in the product documentation 150c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.comwould be appreciated but is not required. 160c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com 170c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com2. Altered source versions must be plainly marked as such, and 180c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.commust not be misrepresented as being the original software. 190c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com 200c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com3. This notice may not be removed or altered from any source 210c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.comdistribution. 220c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com*/ 230c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com 240c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com 250c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com#ifndef TIXML_USE_STL 260c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com 270c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com#include "tinystr.h" 280c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com 290c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com// Error value for find primitive 300c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.comconst TiXmlString::size_type TiXmlString::npos = static_cast< TiXmlString::size_type >(-1); 310c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com 320c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com 330c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com// Null rep. 340c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.comTiXmlString::Rep TiXmlString::nullrep_ = { 0, 0, { '\0' } }; 350c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com 360c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com 370c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.comvoid TiXmlString::reserve (size_type cap) 380c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com{ 390c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com if (cap > capacity()) 400c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com { 410c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com TiXmlString tmp; 420c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com tmp.init(length(), cap); 430c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com memcpy(tmp.start(), data(), length()); 440c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com swap(tmp); 450c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com } 460c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com} 470c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com 480c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com 490c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.comTiXmlString& TiXmlString::assign(const char* str, size_type len) 500c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com{ 510c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com size_type cap = capacity(); 520c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com if (len > cap || cap > 3*(len + 8)) 530c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com { 540c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com TiXmlString tmp; 550c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com tmp.init(len); 560c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com memcpy(tmp.start(), str, len); 570c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com swap(tmp); 580c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com } 590c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com else 600c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com { 610c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com memmove(start(), str, len); 620c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com set_size(len); 630c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com } 640c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com return *this; 650c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com} 660c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com 670c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com 680c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.comTiXmlString& TiXmlString::append(const char* str, size_type len) 690c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com{ 700c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com size_type newsize = length() + len; 710c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com if (newsize > capacity()) 720c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com { 730c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com reserve (newsize + capacity()); 740c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com } 750c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com memmove(finish(), str, len); 760c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com set_size(newsize); 770c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com return *this; 780c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com} 790c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com 800c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com 810c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.comTiXmlString operator + (const TiXmlString & a, const TiXmlString & b) 820c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com{ 830c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com TiXmlString tmp; 840c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com tmp.reserve(a.length() + b.length()); 850c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com tmp += a; 860c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com tmp += b; 870c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com return tmp; 880c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com} 890c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com 900c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.comTiXmlString operator + (const TiXmlString & a, const char* b) 910c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com{ 920c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com TiXmlString tmp; 930c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com TiXmlString::size_type b_len = static_cast<TiXmlString::size_type>( strlen(b) ); 940c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com tmp.reserve(a.length() + b_len); 950c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com tmp += a; 960c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com tmp.append(b, b_len); 970c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com return tmp; 980c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com} 990c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com 1000c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.comTiXmlString operator + (const char* a, const TiXmlString & b) 1010c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com{ 1020c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com TiXmlString tmp; 1030c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com TiXmlString::size_type a_len = static_cast<TiXmlString::size_type>( strlen(a) ); 1040c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com tmp.reserve(a_len + b.length()); 1050c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com tmp.append(a, a_len); 1060c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com tmp += b; 1070c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com return tmp; 1080c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com} 1090c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com 1100c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com 1110c18481adaebdef466bb1b5b0965f9f8db5e2081dfilimon@google.com#endif // TIXML_USE_STL 112