CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_5/src/FWCore/Utilities/src/tinystr.cc

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  * THIS FILE WAS ALTERED BY Eric Vaandering, 25 August 2009.
00030  */
00031 
00032 #define TIXML_USE_STL
00033 
00034 #ifndef TIXML_USE_STL
00035 
00036 #include "FWCore/Utilities/interface/tinystr.h"
00037 
00038 // Error value for find primitive
00039 const TiXmlString::size_type TiXmlString::npos = static_cast< TiXmlString::size_type >(-1);
00040 
00041 
00042 // Null rep.
00043 TiXmlString::Rep TiXmlString::nullrep_ = { 0, 0, { '\0' } };
00044 
00045 
00046 void TiXmlString::reserve (size_type cap)
00047 {
00048         if (cap > capacity())
00049         {
00050                 TiXmlString tmp;
00051                 tmp.init(length(), cap);
00052                 memcpy(tmp.start(), data(), length());
00053                 swap(tmp);
00054         }
00055 }
00056 
00057 
00058 TiXmlString& TiXmlString::assign(const char* str, size_type len)
00059 {
00060         size_type cap = capacity();
00061         if (len > cap || cap > 3*(len + 8))
00062         {
00063                 TiXmlString tmp;
00064                 tmp.init(len);
00065                 memcpy(tmp.start(), str, len);
00066                 swap(tmp);
00067         }
00068         else
00069         {
00070                 memmove(start(), str, len);
00071                 set_size(len);
00072         }
00073         return *this;
00074 }
00075 
00076 
00077 TiXmlString& TiXmlString::append(const char* str, size_type len)
00078 {
00079         size_type newsize = length() + len;
00080         if (newsize > capacity())
00081         {
00082                 reserve (newsize + capacity());
00083         }
00084         memmove(finish(), str, len);
00085         set_size(newsize);
00086         return *this;
00087 }
00088 
00089 
00090 TiXmlString operator + (const TiXmlString & a, const TiXmlString & b)
00091 {
00092         TiXmlString tmp;
00093         tmp.reserve(a.length() + b.length());
00094         tmp += a;
00095         tmp += b;
00096         return tmp;
00097 }
00098 
00099 TiXmlString operator + (const TiXmlString & a, const char* b)
00100 {
00101         TiXmlString tmp;
00102         TiXmlString::size_type b_len = static_cast<TiXmlString::size_type>( strlen(b) );
00103         tmp.reserve(a.length() + b_len);
00104         tmp += a;
00105         tmp.append(b, b_len);
00106         return tmp;
00107 }
00108 
00109 TiXmlString operator + (const char* a, const TiXmlString & b)
00110 {
00111         TiXmlString tmp;
00112         TiXmlString::size_type a_len = static_cast<TiXmlString::size_type>( strlen(a) );
00113         tmp.reserve(a_len + b.length());
00114         tmp.append(a, a_len);
00115         tmp += b;
00116         return tmp;
00117 }
00118 
00119 
00120 #endif  // TIXML_USE_STL