osgEarth 2.1.1
|
00001 /* 00002 www.sourceforge.net/projects/tinyxml 00003 Original file by Yves Berquin. 00004 00005 This software is provided 'as-is', without any express or implied 00006 warranty. In no event will the authors be held liable for any 00007 damages arising from the use of this software. 00008 00009 Permission is granted to anyone to use this software for any 00010 purpose, including commercial applications, and to alter it and 00011 redistribute it freely, subject to the following restrictions: 00012 00013 1. The origin of this software must not be misrepresented; you must 00014 not claim that you wrote the original software. If you use this 00015 software in a product, an acknowledgment in the product documentation 00016 would be appreciated but is not required. 00017 00018 2. Altered source versions must be plainly marked as such, and 00019 must not be misrepresented as being the original software. 00020 00021 3. This notice may not be removed or altered from any source 00022 distribution. 00023 */ 00024 00025 /* 00026 * THIS FILE WAS ALTERED BY Tyge Løvset, 7. April 2005. 00027 */ 00028 00029 00030 #ifndef TIXML_USE_STL 00031 00032 #include "tinystr.h" 00033 00034 // Error value for find primitive 00035 const TiXmlString::size_type TiXmlString::npos = static_cast< TiXmlString::size_type >(-1); 00036 00037 00038 // Null rep. 00039 TiXmlString::Rep TiXmlString::nullrep_ = { 0, 0, { '\0' } }; 00040 00041 00042 void TiXmlString::reserve (size_type cap) 00043 { 00044 if (cap > capacity()) 00045 { 00046 TiXmlString tmp; 00047 tmp.init(length(), cap); 00048 memcpy(tmp.start(), data(), length()); 00049 swap(tmp); 00050 } 00051 } 00052 00053 00054 TiXmlString& TiXmlString::assign(const char* str, size_type len) 00055 { 00056 size_type cap = capacity(); 00057 if (len > cap || cap > 3*(len + 8)) 00058 { 00059 TiXmlString tmp; 00060 tmp.init(len); 00061 memcpy(tmp.start(), str, len); 00062 swap(tmp); 00063 } 00064 else 00065 { 00066 memmove(start(), str, len); 00067 set_size(len); 00068 } 00069 return *this; 00070 } 00071 00072 00073 TiXmlString& TiXmlString::append(const char* str, size_type len) 00074 { 00075 size_type newsize = length() + len; 00076 if (newsize > capacity()) 00077 { 00078 reserve (newsize + capacity()); 00079 } 00080 memmove(finish(), str, len); 00081 set_size(newsize); 00082 return *this; 00083 } 00084 00085 00086 TiXmlString operator + (const TiXmlString & a, const TiXmlString & b) 00087 { 00088 TiXmlString tmp; 00089 tmp.reserve(a.length() + b.length()); 00090 tmp += a; 00091 tmp += b; 00092 return tmp; 00093 } 00094 00095 TiXmlString operator + (const TiXmlString & a, const char* b) 00096 { 00097 TiXmlString tmp; 00098 TiXmlString::size_type b_len = static_cast<TiXmlString::size_type>( strlen(b) ); 00099 tmp.reserve(a.length() + b_len); 00100 tmp += a; 00101 tmp.append(b, b_len); 00102 return tmp; 00103 } 00104 00105 TiXmlString operator + (const char* a, const TiXmlString & b) 00106 { 00107 TiXmlString tmp; 00108 TiXmlString::size_type a_len = static_cast<TiXmlString::size_type>( strlen(a) ); 00109 tmp.reserve(a_len + b.length()); 00110 tmp.append(a, a_len); 00111 tmp += b; 00112 return tmp; 00113 } 00114 00115 00116 #endif // TIXML_USE_STL