diff options
author | Jay Berkenbilt <jberkenbilt@users.noreply.github.com> | 2023-12-16 17:31:11 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-16 17:31:11 +0100 |
commit | b0b6d9f21fe77fb7b46469529bf252f0dbcaa551 (patch) | |
tree | 612562863dbf4364e41e2086b701b92761c18e72 /libqpdf/Buffer.cc | |
parent | d7a364b882be44c93dc4a843bcca2ae63e805c2c (diff) | |
parent | 368666899fe24885fbe05ea03688fa985645ebd9 (diff) | |
download | qpdf-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.cc | 18 |
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); |