diff options
author | Jay Berkenbilt <ejb@ql.org> | 2022-02-06 18:30:18 +0100 |
---|---|---|
committer | Jay Berkenbilt <ejb@ql.org> | 2022-02-07 18:53:28 +0100 |
commit | cfaae47dc6704a54e3e84decbfbe8840c33f2fc4 (patch) | |
tree | 3f6fe735bbd2e5700c1b60193c9ce6d37abe204d | |
parent | 3e98fe46a24d8231ed5f962f5b874032e4994f08 (diff) | |
download | qpdf-cfaae47dc6704a54e3e84decbfbe8840c33f2fc4.tar.zst |
Add getBufferSharedPointer() to Pl_Buffer and QPDFWriter
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | TODO | 2 | ||||
-rw-r--r-- | include/qpdf/Pl_Buffer.hh | 6 | ||||
-rw-r--r-- | include/qpdf/QPDFWriter.hh | 11 | ||||
-rw-r--r-- | libqpdf/Pl_Buffer.cc | 8 | ||||
-rw-r--r-- | libqpdf/QPDFWriter.cc | 6 |
6 files changed, 32 insertions, 5 deletions
@@ -1,5 +1,9 @@ 2022-02-06 Jay Berkenbilt <ejb@ql.org> + * Pl_Buffer and QPDFWriter: add getBufferSharedPointer(), which + turns a PointerHolder<Buffer> but will return a + std::shared_ptr<Buffer> in qpdf 11. + * From m-holger: add getKeyIfDict(), which calls getKey for dictionaries and returns null if called on null. This is for easier access to optional, lower-level dictionaries. @@ -420,6 +420,8 @@ auto x = std::make_unique<T[]>(5) PointerHolder in public API: + PointerHolder<Buffer> Pl_Buffer::getBufferSharedPointer(); + PointerHolder<Buffer> QPDFWriter::getBufferSharedPointer(); QUtil::read_file_into_memory( char const*, PointerHolder<char>&, unsigned long&) QPDFObjectHandle::addContentTokenFilter( diff --git a/include/qpdf/Pl_Buffer.hh b/include/qpdf/Pl_Buffer.hh index 656c755c..98c87622 100644 --- a/include/qpdf/Pl_Buffer.hh +++ b/include/qpdf/Pl_Buffer.hh @@ -51,10 +51,14 @@ class Pl_Buffer: public Pipeline // Each call to getBuffer() resets this object -- see notes above. // The caller is responsible for deleting the returned Buffer - // object. + // object. See also getBufferSharedPointer() and getMallocBuffer(). QPDF_DLL Buffer* getBuffer(); + // Same as getBuffer but wraps the result in a shared pointer. + QPDF_DLL + PointerHolder<Buffer> getBufferSharedPointer(); + // getMallocBuffer behaves in the same was as getBuffer except the // buffer is allocated with malloc(), making it suitable for use // when calling from other languages. If there is no data, *buf is diff --git a/include/qpdf/QPDFWriter.hh b/include/qpdf/QPDFWriter.hh index 76f50c96..cb6585f0 100644 --- a/include/qpdf/QPDFWriter.hh +++ b/include/qpdf/QPDFWriter.hh @@ -118,13 +118,18 @@ class QPDFWriter QPDF_DLL void setOutputMemory(); - // Return the buffer object containing the PDF file. If + // Return the buffer object containing the PDF file. If // setOutputMemory() has been called, this method may be called - // exactly one time after write() has returned. The caller is - // responsible for deleting the buffer when done. + // exactly one time after write() has returned. The caller is + // responsible for deleting the buffer when done. See also + // getBufferSharedPointer(). QPDF_DLL Buffer* getBuffer(); + // Return getBuffer() in a shared pointer. + QPDF_DLL + PointerHolder<Buffer> getBufferSharedPointer(); + // Supply your own pipeline object. Output will be written to // this pipeline, and QPDFWriter will call finish() on the // pipeline. It is the caller's responsibility to manage the diff --git a/libqpdf/Pl_Buffer.cc b/libqpdf/Pl_Buffer.cc index 73db555a..3a41c579 100644 --- a/libqpdf/Pl_Buffer.cc +++ b/libqpdf/Pl_Buffer.cc @@ -79,10 +79,16 @@ Pl_Buffer::getBuffer() unsigned char* p = b->getBuffer(); memcpy(p, this->m->data->getBuffer(), this->m->total_size); } - this->m = new Members(); + this->m = PointerHolder<Members>(new Members()); return b; } +PointerHolder<Buffer> +Pl_Buffer::getBufferSharedPointer() +{ + return PointerHolder<Buffer>(getBuffer()); +} + void Pl_Buffer::getMallocBuffer(unsigned char **buf, size_t* len) { diff --git a/libqpdf/QPDFWriter.cc b/libqpdf/QPDFWriter.cc index 5f7b39a5..7cde1426 100644 --- a/libqpdf/QPDFWriter.cc +++ b/libqpdf/QPDFWriter.cc @@ -157,6 +157,12 @@ QPDFWriter::getBuffer() return result; } +PointerHolder<Buffer> +QPDFWriter::getBufferSharedPointer() +{ + return PointerHolder<Buffer>(getBuffer()); +} + void QPDFWriter::setOutputPipeline(Pipeline* p) { |