aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/Pl_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/Pl_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/Pl_Buffer.cc')
-rw-r--r--libqpdf/Pl_Buffer.cc19
1 files changed, 12 insertions, 7 deletions
diff --git a/libqpdf/Pl_Buffer.cc b/libqpdf/Pl_Buffer.cc
index 766c04b5..9994bedd 100644
--- a/libqpdf/Pl_Buffer.cc
+++ b/libqpdf/Pl_Buffer.cc
@@ -19,7 +19,7 @@ Pl_Buffer::~Pl_Buffer() // NOLINT (modernize-use-equals-default)
void
Pl_Buffer::write(unsigned char const* buf, size_t len)
{
- m->data.insert(m->data.end(), buf, buf + len);
+ m->data.append(reinterpret_cast<char const*>(buf), len);
m->ready = false;
if (getNext(true)) {
@@ -42,15 +42,20 @@ Pl_Buffer::getBuffer()
if (!m->ready) {
throw std::logic_error("Pl_Buffer::getBuffer() called when not ready");
}
+ auto* b = new Buffer(std::move(m->data));
+ m->data.clear();
+ return b;
+}
- auto size = m->data.size();
- auto* b = new Buffer(size);
- if (size > 0) {
- unsigned char* p = b->getBuffer();
- memcpy(p, m->data.data(), size);
+std::string
+Pl_Buffer::getString()
+{
+ if (!m->ready) {
+ throw std::logic_error("Pl_Buffer::getString() called when not ready");
}
+ auto s = std::move(m->data);
m->data.clear();
- return b;
+ return s;
}
std::shared_ptr<Buffer>