aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/qpdf/Pl_LZWDecoder.hh
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2008-04-29 14:55:25 +0200
committerJay Berkenbilt <ejb@ql.org>2008-04-29 14:55:25 +0200
commit9a0b88bf7777c153dc46ace22db74ef24d51583a (patch)
treef567ac1cf2bf5071a611eb49323a935b6ac938ff /libqpdf/qpdf/Pl_LZWDecoder.hh
downloadqpdf-9a0b88bf7777c153dc46ace22db74ef24d51583a.tar.zst
update release date to actual daterelease-qpdf-2.0
git-svn-id: svn+q:///qpdf/trunk@599 71b93d88-0707-0410-a8cf-f5a4172ac649
Diffstat (limited to 'libqpdf/qpdf/Pl_LZWDecoder.hh')
-rw-r--r--libqpdf/qpdf/Pl_LZWDecoder.hh40
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__