|
ferencd@0
|
1 /*
|
|
ferencd@0
|
2 www.sourceforge.net/projects/tinyxml
|
|
ferencd@0
|
3
|
|
ferencd@0
|
4 This software is provided 'as-is', without any express or implied
|
|
ferencd@0
|
5 warranty. In no event will the authors be held liable for any
|
|
ferencd@0
|
6 damages arising from the use of this software.
|
|
ferencd@0
|
7
|
|
ferencd@0
|
8 Permission is granted to anyone to use this software for any
|
|
ferencd@0
|
9 purpose, including commercial applications, and to alter it and
|
|
ferencd@0
|
10 redistribute it freely, subject to the following restrictions:
|
|
ferencd@0
|
11
|
|
ferencd@0
|
12 1. The origin of this software must not be misrepresented; you must
|
|
ferencd@0
|
13 not claim that you wrote the original software. If you use this
|
|
ferencd@0
|
14 software in a product, an acknowledgment in the product documentation
|
|
ferencd@0
|
15 would be appreciated but is not required.
|
|
ferencd@0
|
16
|
|
ferencd@0
|
17 2. Altered source versions must be plainly marked as such, and
|
|
ferencd@0
|
18 must not be misrepresented as being the original software.
|
|
ferencd@0
|
19
|
|
ferencd@0
|
20 3. This notice may not be removed or altered from any source
|
|
ferencd@0
|
21 distribution.
|
|
ferencd@0
|
22 */
|
|
ferencd@0
|
23
|
|
ferencd@0
|
24
|
|
ferencd@0
|
25 #ifndef TIXML_USE_STL
|
|
ferencd@0
|
26
|
|
ferencd@0
|
27 #include "tinystr.h"
|
|
ferencd@0
|
28
|
|
ferencd@0
|
29 // Error value for find primitive
|
|
ferencd@0
|
30 const TiXmlString::size_type TiXmlString::npos = static_cast< TiXmlString::size_type >(-1);
|
|
ferencd@0
|
31
|
|
ferencd@0
|
32
|
|
ferencd@0
|
33 // Null rep.
|
|
ferencd@0
|
34 TiXmlString::Rep TiXmlString::nullrep_ = { 0, 0, { '\0' } };
|
|
ferencd@0
|
35
|
|
ferencd@0
|
36
|
|
ferencd@0
|
37 void TiXmlString::reserve (size_type cap)
|
|
ferencd@0
|
38 {
|
|
ferencd@0
|
39 if (cap > capacity())
|
|
ferencd@0
|
40 {
|
|
ferencd@0
|
41 TiXmlString tmp;
|
|
ferencd@0
|
42 tmp.init(length(), cap);
|
|
ferencd@0
|
43 memcpy(tmp.start(), data(), length());
|
|
ferencd@0
|
44 swap(tmp);
|
|
ferencd@0
|
45 }
|
|
ferencd@0
|
46 }
|
|
ferencd@0
|
47
|
|
ferencd@0
|
48
|
|
ferencd@0
|
49 TiXmlString& TiXmlString::assign(const char* str, size_type len)
|
|
ferencd@0
|
50 {
|
|
ferencd@0
|
51 size_type cap = capacity();
|
|
ferencd@0
|
52 if (len > cap || cap > 3*(len + 8))
|
|
ferencd@0
|
53 {
|
|
ferencd@0
|
54 TiXmlString tmp;
|
|
ferencd@0
|
55 tmp.init(len);
|
|
ferencd@0
|
56 memcpy(tmp.start(), str, len);
|
|
ferencd@0
|
57 swap(tmp);
|
|
ferencd@0
|
58 }
|
|
ferencd@0
|
59 else
|
|
ferencd@0
|
60 {
|
|
ferencd@0
|
61 memmove(start(), str, len);
|
|
ferencd@0
|
62 set_size(len);
|
|
ferencd@0
|
63 }
|
|
ferencd@0
|
64 return *this;
|
|
ferencd@0
|
65 }
|
|
ferencd@0
|
66
|
|
ferencd@0
|
67
|
|
ferencd@0
|
68 TiXmlString& TiXmlString::append(const char* str, size_type len)
|
|
ferencd@0
|
69 {
|
|
ferencd@0
|
70 size_type newsize = length() + len;
|
|
ferencd@0
|
71 if (newsize > capacity())
|
|
ferencd@0
|
72 {
|
|
ferencd@0
|
73 reserve (newsize + capacity());
|
|
ferencd@0
|
74 }
|
|
ferencd@0
|
75 memmove(finish(), str, len);
|
|
ferencd@0
|
76 set_size(newsize);
|
|
ferencd@0
|
77 return *this;
|
|
ferencd@0
|
78 }
|
|
ferencd@0
|
79
|
|
ferencd@0
|
80
|
|
ferencd@0
|
81 TiXmlString operator + (const TiXmlString & a, const TiXmlString & b)
|
|
ferencd@0
|
82 {
|
|
ferencd@0
|
83 TiXmlString tmp;
|
|
ferencd@0
|
84 tmp.reserve(a.length() + b.length());
|
|
ferencd@0
|
85 tmp += a;
|
|
ferencd@0
|
86 tmp += b;
|
|
ferencd@0
|
87 return tmp;
|
|
ferencd@0
|
88 }
|
|
ferencd@0
|
89
|
|
ferencd@0
|
90 TiXmlString operator + (const TiXmlString & a, const char* b)
|
|
ferencd@0
|
91 {
|
|
ferencd@0
|
92 TiXmlString tmp;
|
|
ferencd@0
|
93 TiXmlString::size_type b_len = static_cast<TiXmlString::size_type>( strlen(b) );
|
|
ferencd@0
|
94 tmp.reserve(a.length() + b_len);
|
|
ferencd@0
|
95 tmp += a;
|
|
ferencd@0
|
96 tmp.append(b, b_len);
|
|
ferencd@0
|
97 return tmp;
|
|
ferencd@0
|
98 }
|
|
ferencd@0
|
99
|
|
ferencd@0
|
100 TiXmlString operator + (const char* a, const TiXmlString & b)
|
|
ferencd@0
|
101 {
|
|
ferencd@0
|
102 TiXmlString tmp;
|
|
ferencd@0
|
103 TiXmlString::size_type a_len = static_cast<TiXmlString::size_type>( strlen(a) );
|
|
ferencd@0
|
104 tmp.reserve(a_len + b.length());
|
|
ferencd@0
|
105 tmp.append(a, a_len);
|
|
ferencd@0
|
106 tmp += b;
|
|
ferencd@0
|
107 return tmp;
|
|
ferencd@0
|
108 }
|
|
ferencd@0
|
109
|
|
ferencd@0
|
110
|
|
ferencd@0
|
111 #endif // TIXML_USE_STL
|