osgEarth 2.1.1

/home/cube/sources/osgearth/src/osgEarth/tinystr.cpp

Go to the documentation of this file.
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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines