2
1
mirror of https://github.com/qpdf/qpdf.git synced 2024-05-31 09:20:52 +00:00
qpdf/libqpdf/qpdf/QPDF_Stream.hh
Jay Berkenbilt e2dedde4bd Don't require stream data provider to know length in advance
Breaking API change: length parameter has disappeared from the
StreamDataProvider version of QPDFObjectHandle::replaceStreamData
since it is no longer necessary to compute it in advance.  This
breaking change is justified by the fact that removing the length
parameter provides the caller an opportunity to simplify the calling
code.
2012-07-07 17:33:45 -04:00

60 lines
1.8 KiB
C++

#ifndef __QPDF_STREAM_HH__
#define __QPDF_STREAM_HH__
#include <qpdf/Types.h>
#include <qpdf/QPDFObject.hh>
#include <qpdf/QPDFObjectHandle.hh>
class Pipeline;
class QPDF;
class QPDF_Stream: public QPDFObject
{
public:
QPDF_Stream(QPDF*, int objid, int generation,
QPDFObjectHandle stream_dict,
qpdf_offset_t offset, size_t length);
virtual ~QPDF_Stream();
virtual std::string unparse();
QPDFObjectHandle getDict() const;
// See comments in QPDFObjectHandle.hh for these methods.
bool pipeStreamData(Pipeline*, bool filter,
bool normalize, bool compress);
PointerHolder<Buffer> getStreamData();
PointerHolder<Buffer> getRawStreamData();
void replaceStreamData(PointerHolder<Buffer> data,
QPDFObjectHandle const& filter,
QPDFObjectHandle const& decode_parms);
void replaceStreamData(
PointerHolder<QPDFObjectHandle::StreamDataProvider> provider,
QPDFObjectHandle const& filter,
QPDFObjectHandle const& decode_parms);
// Replace object ID and generation. This may only be called if
// object ID and generation are 0. It is used by QPDFObjectHandle
// when adding streams to files.
void setObjGen(int objid, int generation);
private:
static std::map<std::string, std::string> filter_abbreviations;
void replaceFilterData(QPDFObjectHandle const& filter,
QPDFObjectHandle const& decode_parms,
size_t length);
bool filterable(std::vector<std::string>& filters,
int& predictor, int& columns, bool& early_code_change);
QPDF* qpdf;
int objid;
int generation;
QPDFObjectHandle stream_dict;
qpdf_offset_t offset;
size_t length;
PointerHolder<Buffer> stream_data;
PointerHolder<QPDFObjectHandle::StreamDataProvider> stream_provider;
};
#endif // __QPDF_STREAM_HH__