Alexander Steiger / tinyxml
Committer:
steiger
Date:
Sun Nov 21 00:49:17 2010 +0000
Revision:
0:7c97dcef700c

        

Who changed what in which revision?

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