From 9a0b88bf7777c153dc46ace22db74ef24d51583a Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Tue, 29 Apr 2008 12:55:25 +0000 Subject: update release date to actual date git-svn-id: svn+q:///qpdf/trunk@599 71b93d88-0707-0410-a8cf-f5a4172ac649 --- libqpdf/Pl_Buffer.cc | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 libqpdf/Pl_Buffer.cc (limited to 'libqpdf/Pl_Buffer.cc') diff --git a/libqpdf/Pl_Buffer.cc b/libqpdf/Pl_Buffer.cc new file mode 100644 index 00000000..185cf636 --- /dev/null +++ b/libqpdf/Pl_Buffer.cc @@ -0,0 +1,67 @@ + +#include +#include +#include + +Pl_Buffer::Pl_Buffer(char const* identifier, Pipeline* next) : + Pipeline(identifier, next), + ready(false), + total_size(0) +{ +} + +Pl_Buffer::~Pl_Buffer() +{ +} + +void +Pl_Buffer::write(unsigned char* buf, int len) +{ + Buffer* b = new Buffer(len); + memcpy(b->getBuffer(), buf, len); + this->data.push_back(b); + this->ready = false; + this->total_size += len; + + if (getNext(true)) + { + getNext()->write(buf, len); + } +} + +void +Pl_Buffer::finish() +{ + this->ready = true; + if (getNext(true)) + { + getNext()->finish(); + } +} + +Buffer* +Pl_Buffer::getBuffer() +{ + if (! this->ready) + { + throw QEXC::Internal("Pl_Buffer::getBuffer() called when not ready"); + } + + Buffer* b = new Buffer(this->total_size); + unsigned char* p = b->getBuffer(); + while (! this->data.empty()) + { + PointerHolder bph = this->data.front(); + this->data.pop_front(); + Buffer* bp = bph.getPointer(); + size_t bytes = bp->getSize(); + memcpy(p, bp->getBuffer(), bytes); + p += bytes; + this->total_size -= bytes; + } + + assert(this->total_size == 0); + this->ready = false; + + return b; +} -- cgit v1.2.3-54-g00ecf