diff options
author | Jay Berkenbilt <ejb@ql.org> | 2022-06-19 14:56:36 +0200 |
---|---|---|
committer | Jay Berkenbilt <ejb@ql.org> | 2022-06-19 15:12:29 +0200 |
commit | eae75dbe448b0395aee7e49c2a9cca9f82680782 (patch) | |
tree | ea5a9edfbd52ca5c381e5f97f79e46693d4b2beb /libqpdf | |
parent | bb0ea2f8e7d8fffa575b291004e4426138c7bb1a (diff) | |
download | qpdf-eae75dbe448b0395aee7e49c2a9cca9f82680782.tar.zst |
Add Pl_Function -- a generic function pipeline
Diffstat (limited to 'libqpdf')
-rw-r--r-- | libqpdf/CMakeLists.txt | 1 | ||||
-rw-r--r-- | libqpdf/Pl_Function.cc | 39 |
2 files changed, 40 insertions, 0 deletions
diff --git a/libqpdf/CMakeLists.txt b/libqpdf/CMakeLists.txt index 3c14115b..a6e30163 100644 --- a/libqpdf/CMakeLists.txt +++ b/libqpdf/CMakeLists.txt @@ -42,6 +42,7 @@ set(libqpdf_SOURCES Pl_DCT.cc Pl_Discard.cc Pl_Flate.cc + Pl_Function.cc Pl_LZWDecoder.cc Pl_MD5.cc Pl_OStream.cc diff --git a/libqpdf/Pl_Function.cc b/libqpdf/Pl_Function.cc new file mode 100644 index 00000000..32fcccf1 --- /dev/null +++ b/libqpdf/Pl_Function.cc @@ -0,0 +1,39 @@ +#include <qpdf/Pl_Function.hh> + +#include <qpdf/QUtil.hh> +#include <errno.h> +#include <stdexcept> + +Pl_Function::Members::Members(writer_t fn) : + fn(fn) +{ +} + +Pl_Function::Pl_Function(char const* identifier, Pipeline* next, writer_t fn) : + Pipeline(identifier, next), + m(new Members(fn)) +{ +} + +Pl_Function::~Pl_Function() +{ + // Must be explicit and not inline -- see QPDF_DLL_CLASS in + // README-maintainer +} + +void +Pl_Function::write(unsigned char const* buf, size_t len) +{ + this->m->fn(buf, len); + if (getNext(true)) { + getNext()->write(buf, len); + } +} + +void +Pl_Function::finish() +{ + if (getNext(true)) { + getNext()->finish(); + } +} |