annotate 3rdparty/tinyxml/tinystr.cpp @ 0:a4671277546c tip

created the repository for the thymian project
author ferencd
date Tue, 17 Aug 2021 11:19:54 +0200
parents
children
rev   line source
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