Add Pl_Concatenate filter

This commit is contained in:
Tobias Hoffmann 2012-06-27 07:00:18 +02:00 committed by Jay Berkenbilt
parent 43c404b45a
commit f07e3370f0
3 changed files with 61 additions and 0 deletions

View File

@ -0,0 +1,32 @@
#ifndef __PL_CONCATENATE_HH__
#define __PL_CONCATENATE_HH__
// This pipeline will drop all regular finished calls rather than
// passing them onto next. To finish downstream streams, call
// manualFinish. This makes it possible to pipe multiple streams
// (e.g. with QPDFObjectHandle::pipeStreamData) to a downstream like
// Pl_Flate that can't handle multiple calls to finish().
#include <qpdf/Pipeline.hh>
class Pl_Concatenate: public Pipeline
{
public:
QPDF_DLL
Pl_Concatenate(char const* identifier, Pipeline* next);
QPDF_DLL
virtual ~Pl_Concatenate();
QPDF_DLL
virtual void write(unsigned char* data, size_t len);
QPDF_DLL
virtual void finish();
// At the very end, call manualFinish actually finish the rest of
// the pipeline.
QPDF_DLL
void manualFinish();
};
#endif // __PL_CONCATENATE_HH__

28
libqpdf/Pl_Concatenate.cc Normal file
View File

@ -0,0 +1,28 @@
#include <qpdf/Pl_Concatenate.hh>
Pl_Concatenate::Pl_Concatenate(char const* identifier, Pipeline* next) :
Pipeline(identifier, next)
{
}
Pl_Concatenate::~Pl_Concatenate()
{
}
void
Pl_Concatenate::write(unsigned char* data, size_t len)
{
getNext()->write(data, len);
}
void
Pl_Concatenate::finish()
{
}
void
Pl_Concatenate::manualFinish()
{
getNext()->finish();
}

View File

@ -15,6 +15,7 @@ SRCS_libqpdf = \
libqpdf/Pl_ASCII85Decoder.cc \
libqpdf/Pl_ASCIIHexDecoder.cc \
libqpdf/Pl_Buffer.cc \
libqpdf/Pl_Concatenate.cc \
libqpdf/Pl_Count.cc \
libqpdf/Pl_Discard.cc \
libqpdf/Pl_Flate.cc \