00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef TIXML_USE_STL
00031
00032 #include "tinystr.h"
00033
00034
00035 const TiXmlString::size_type TiXmlString::npos = static_cast< TiXmlString::size_type >(-1);
00036
00037
00038
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