diff options
Diffstat (limited to 'libqpdf/qpdf/Pl_LZWDecoder.hh')
-rw-r--r-- | libqpdf/qpdf/Pl_LZWDecoder.hh | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/libqpdf/qpdf/Pl_LZWDecoder.hh b/libqpdf/qpdf/Pl_LZWDecoder.hh new file mode 100644 index 00000000..95ec55b3 --- /dev/null +++ b/libqpdf/qpdf/Pl_LZWDecoder.hh @@ -0,0 +1,40 @@ + +#ifndef __PL_LZWDECODER_HH__ +#define __PL_LZWDECODER_HH__ + +#include <qpdf/Pipeline.hh> + +#include <qpdf/Buffer.hh> +#include <vector> + +class Pl_LZWDecoder: public Pipeline +{ + public: + Pl_LZWDecoder(char const* identifier, Pipeline* next, + bool early_code_change); + virtual ~Pl_LZWDecoder(); + virtual void write(unsigned char* buf, int len); + virtual void finish(); + + private: + void sendNextCode(); + void handleCode(int code); + unsigned char getFirstChar(int code); + void addToTable(unsigned char next); + + // members used for converting bits to codes + unsigned char buf[3]; + int code_size; + int next; + int byte_pos; + int bit_pos; // left to right: 01234567 + int bits_available; + + // members used for handle LZW decompression + bool code_change_delta; + bool eod; + std::vector<Buffer> table; + int last_code; +}; + +#endif // __PL_LZWDECODER_HH__ |