aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/Buffer.cc
diff options
context:
space:
mode:
authorJay Berkenbilt <jberkenbilt@users.noreply.github.com>2023-12-16 17:31:11 +0100
committerGitHub <noreply@github.com>2023-12-16 17:31:11 +0100
commitb0b6d9f21fe77fb7b46469529bf252f0dbcaa551 (patch)
tree612562863dbf4364e41e2086b701b92761c18e72 /libqpdf/Buffer.cc
parentd7a364b882be44c93dc4a843bcca2ae63e805c2c (diff)
parent368666899fe24885fbe05ea03688fa985645ebd9 (diff)
downloadqpdf-b0b6d9f21fe77fb7b46469529bf252f0dbcaa551.tar.zst
Merge pull request #1067 from m-holger/pl_buff
Reduce copying of Buffer contents
Diffstat (limited to 'libqpdf/Buffer.cc')
-rw-r--r--libqpdf/Buffer.cc18
1 files changed, 18 insertions, 0 deletions
diff --git a/libqpdf/Buffer.cc b/libqpdf/Buffer.cc
index 3dddd5db..20453a40 100644
--- a/libqpdf/Buffer.cc
+++ b/libqpdf/Buffer.cc
@@ -27,6 +27,14 @@ Buffer::Members::Members(size_t size, unsigned char* buf, bool own_memory) :
}
}
+Buffer::Members::Members(std::string&& content) :
+ str(std::move(content)),
+ own_memory(false),
+ size(str.size()),
+ buf(reinterpret_cast<unsigned char*>(str.data()))
+{
+}
+
Buffer::Members::~Members()
{
if (this->own_memory) {
@@ -44,11 +52,21 @@ Buffer::Buffer(size_t size) :
{
}
+Buffer::Buffer(std::string&& content) :
+ m(new Members(std::move(content)))
+{
+}
+
Buffer::Buffer(unsigned char* buf, size_t size) :
m(new Members(size, buf, false))
{
}
+Buffer::Buffer(std::string& content) :
+ m(new Members(content.size(), reinterpret_cast<unsigned char*>(content.data()), false))
+{
+}
+
Buffer::Buffer(Buffer const& rhs)
{
assert(test_mode);