ferencd@0: /* ferencd@0: www.sourceforge.net/projects/tinyxml ferencd@0: ferencd@0: This software is provided 'as-is', without any express or implied ferencd@0: warranty. In no event will the authors be held liable for any ferencd@0: damages arising from the use of this software. ferencd@0: ferencd@0: Permission is granted to anyone to use this software for any ferencd@0: purpose, including commercial applications, and to alter it and ferencd@0: redistribute it freely, subject to the following restrictions: ferencd@0: ferencd@0: 1. The origin of this software must not be misrepresented; you must ferencd@0: not claim that you wrote the original software. If you use this ferencd@0: software in a product, an acknowledgment in the product documentation ferencd@0: would be appreciated but is not required. ferencd@0: ferencd@0: 2. Altered source versions must be plainly marked as such, and ferencd@0: must not be misrepresented as being the original software. ferencd@0: ferencd@0: 3. This notice may not be removed or altered from any source ferencd@0: distribution. ferencd@0: */ ferencd@0: ferencd@0: ferencd@0: #ifndef TIXML_USE_STL ferencd@0: ferencd@0: #include "tinystr.h" ferencd@0: ferencd@0: // Error value for find primitive ferencd@0: const TiXmlString::size_type TiXmlString::npos = static_cast< TiXmlString::size_type >(-1); ferencd@0: ferencd@0: ferencd@0: // Null rep. ferencd@0: TiXmlString::Rep TiXmlString::nullrep_ = { 0, 0, { '\0' } }; ferencd@0: ferencd@0: ferencd@0: void TiXmlString::reserve (size_type cap) ferencd@0: { ferencd@0: if (cap > capacity()) ferencd@0: { ferencd@0: TiXmlString tmp; ferencd@0: tmp.init(length(), cap); ferencd@0: memcpy(tmp.start(), data(), length()); ferencd@0: swap(tmp); ferencd@0: } ferencd@0: } ferencd@0: ferencd@0: ferencd@0: TiXmlString& TiXmlString::assign(const char* str, size_type len) ferencd@0: { ferencd@0: size_type cap = capacity(); ferencd@0: if (len > cap || cap > 3*(len + 8)) ferencd@0: { ferencd@0: TiXmlString tmp; ferencd@0: tmp.init(len); ferencd@0: memcpy(tmp.start(), str, len); ferencd@0: swap(tmp); ferencd@0: } ferencd@0: else ferencd@0: { ferencd@0: memmove(start(), str, len); ferencd@0: set_size(len); ferencd@0: } ferencd@0: return *this; ferencd@0: } ferencd@0: ferencd@0: ferencd@0: TiXmlString& TiXmlString::append(const char* str, size_type len) ferencd@0: { ferencd@0: size_type newsize = length() + len; ferencd@0: if (newsize > capacity()) ferencd@0: { ferencd@0: reserve (newsize + capacity()); ferencd@0: } ferencd@0: memmove(finish(), str, len); ferencd@0: set_size(newsize); ferencd@0: return *this; ferencd@0: } ferencd@0: ferencd@0: ferencd@0: TiXmlString operator + (const TiXmlString & a, const TiXmlString & b) ferencd@0: { ferencd@0: TiXmlString tmp; ferencd@0: tmp.reserve(a.length() + b.length()); ferencd@0: tmp += a; ferencd@0: tmp += b; ferencd@0: return tmp; ferencd@0: } ferencd@0: ferencd@0: TiXmlString operator + (const TiXmlString & a, const char* b) ferencd@0: { ferencd@0: TiXmlString tmp; ferencd@0: TiXmlString::size_type b_len = static_cast( strlen(b) ); ferencd@0: tmp.reserve(a.length() + b_len); ferencd@0: tmp += a; ferencd@0: tmp.append(b, b_len); ferencd@0: return tmp; ferencd@0: } ferencd@0: ferencd@0: TiXmlString operator + (const char* a, const TiXmlString & b) ferencd@0: { ferencd@0: TiXmlString tmp; ferencd@0: TiXmlString::size_type a_len = static_cast( strlen(a) ); ferencd@0: tmp.reserve(a_len + b.length()); ferencd@0: tmp.append(a, a_len); ferencd@0: tmp += b; ferencd@0: return tmp; ferencd@0: } ferencd@0: ferencd@0: ferencd@0: #endif // TIXML_USE_STL