diff options
Diffstat (limited to 'libqpdf/Buffer.cc')
-rw-r--r-- | libqpdf/Buffer.cc | 82 |
1 files changed, 36 insertions, 46 deletions
diff --git a/libqpdf/Buffer.cc b/libqpdf/Buffer.cc index 94e69a56..a15f73e8 100644 --- a/libqpdf/Buffer.cc +++ b/libqpdf/Buffer.cc @@ -1,53 +1,55 @@ #include <qpdf/Buffer.hh> -#include <string.h> +#include <cstring> -Buffer::Buffer() +Buffer::Members::Members(size_t size, unsigned char* buf, bool own_memory) : + own_memory(own_memory), + size(size), + buf(0) { - init(0, 0, true); + if (own_memory) + { + this->buf = (size ? new unsigned char[size] : 0); + } + else + { + this->buf = buf; + } } -Buffer::Buffer(size_t size) +Buffer::Members::~Members() { - init(size, 0, true); + if (this->own_memory) + { + delete [] this->buf; + } } -Buffer::Buffer(unsigned char* buf, size_t size) +Buffer::Buffer() : + m(new Members(0, 0, true)) { - init(size, buf, false); } -Buffer::Buffer(Buffer const& rhs) +Buffer::Buffer(size_t size) : + m(new Members(size, 0, true)) { - init(0, 0, true); - copy(rhs); } -Buffer& -Buffer::operator=(Buffer const& rhs) +Buffer::Buffer(unsigned char* buf, size_t size) : + m(new Members(size, buf, false)) { - copy(rhs); - return *this; } -Buffer::~Buffer() +Buffer::Buffer(Buffer const& rhs) { - destroy(); + copy(rhs); } -void -Buffer::init(size_t size, unsigned char* buf, bool own_memory) +Buffer& +Buffer::operator=(Buffer const& rhs) { - this->own_memory = own_memory; - this->size = size; - if (own_memory) - { - this->buf = (size ? new unsigned char[size] : 0); - } - else - { - this->buf = buf; - } + copy(rhs); + return *this; } void @@ -55,40 +57,28 @@ Buffer::copy(Buffer const& rhs) { if (this != &rhs) { - this->destroy(); - this->init(rhs.size, 0, true); - if (this->size) + this->m = new Members(rhs.m->size, 0, true); + if (this->m->size) { - memcpy(this->buf, rhs.buf, this->size); + memcpy(this->m->buf, rhs.m->buf, this->m->size); } } } -void -Buffer::destroy() -{ - if (this->own_memory) - { - delete [] this->buf; - } - this->size = 0; - this->buf = 0; -} - size_t Buffer::getSize() const { - return this->size; + return this->m->size; } unsigned char const* Buffer::getBuffer() const { - return this->buf; + return this->m->buf; } unsigned char* Buffer::getBuffer() { - return this->buf; + return this->m->buf; } |