1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
--- inc/librevenge/RVNGString.h 2023-05-17 15:48:15.373159469 +0200
+++ inc/librevenge/RVNGString.h 2023-05-17 15:49:00.781411917 +0200
@@ -22,6 +22,7 @@
#define RVNGSTRING_H
#include "librevenge-api.h"
+#include <string>
namespace librevenge
{
@@ -36,6 +37,7 @@
RVNGString();
RVNGString(const RVNGString &other);
RVNGString(const char *str);
+ RVNGString(std::string&&);
~RVNGString();
/** Create a new string from \a s as escaped XML.
--- src/lib/RVNGBinaryData.cpp 2023-05-17 15:48:15.373159469 +0200
+++ src/lib/RVNGBinaryData.cpp 2023-05-17 15:49:00.773411873 +0200
@@ -67,9 +67,9 @@
boost::archive::iterators::transform_width<std::vector<unsigned char>::const_iterator, 6, 8 > > base64_encoder;
// Encode the buffer and create a string
- std::copy(
+ result.insert(result.begin(),
base64_encoder(source.begin()),
- base64_encoder(source.end()), std::back_inserter(result));
+ base64_encoder(source.end()));
result.append(numPadding, '='); // add '=' for each padded character
}
@@ -150,10 +150,10 @@
{
m_binaryDataImpl->makeUnique();
- unsigned long previousSize = m_binaryDataImpl->m_ptr->m_buf.size();
- m_binaryDataImpl->m_ptr->m_buf.reserve(previousSize + data.m_binaryDataImpl->m_ptr->m_buf.size());
- for (unsigned long i = 0; i < data.m_binaryDataImpl->m_ptr->m_buf.size(); i++)
- m_binaryDataImpl->m_ptr->m_buf.push_back(data.m_binaryDataImpl->m_ptr->m_buf[i]);
+ m_binaryDataImpl->m_ptr->m_buf.insert(
+ m_binaryDataImpl->m_ptr->m_buf.end(),
+ data.m_binaryDataImpl->m_ptr->m_buf.begin(),
+ data.m_binaryDataImpl->m_ptr->m_buf.end());
}
void RVNGBinaryData::appendBase64Data(const RVNGString &base64)
@@ -231,8 +231,9 @@
const RVNGString RVNGBinaryData::getBase64Data() const
{
std::string base64;
+ base64.reserve(m_binaryDataImpl->m_ptr->m_buf.size() / 4 * 3);
convertToBase64(base64, m_binaryDataImpl->m_ptr->m_buf);
- return RVNGString(base64.c_str());
+ return RVNGString(std::move(base64));
}
RVNGInputStream *RVNGBinaryData::getDataStream() const
--- src/lib/RVNGString.cpp 2023-05-17 15:48:15.373159469 +0200
+++ src/lib/RVNGString.cpp 2023-05-17 15:49:00.773411873 +0200
@@ -73,6 +73,7 @@
{
public:
RVNGStringImpl() : m_buf() {}
+ RVNGStringImpl(std::string&& str) : m_buf(std::move(str)) {}
bool empty() const
{
return m_buf.empty();
@@ -157,6 +158,11 @@
m_stringImpl->m_buf = str;
}
+RVNGString::RVNGString(std::string&& str) :
+ m_stringImpl(new RVNGStringImpl(std::move(str)))
+{
+}
+
RVNGString RVNGString::escapeXML(const RVNGString &s)
{
RVNGString escaped;
|