aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2017-08-16 12:26:31 +0200
committerJay Berkenbilt <ejb@ql.org>2017-08-19 20:50:55 +0200
commit2d2f61966525cb948bcb6307cccbc3493b1825b5 (patch)
tree862dbdd156d2af563d0d20f755f7abeb2c200889 /include
parente0d1cd1f4b2de30967f9c70460c2d0765f003676 (diff)
downloadqpdf-2d2f61966525cb948bcb6307cccbc3493b1825b5.tar.zst
Implement Pl_RunLength pipeline
Diffstat (limited to 'include')
-rw-r--r--include/qpdf/Pl_RunLength.hh42
1 files changed, 42 insertions, 0 deletions
diff --git a/include/qpdf/Pl_RunLength.hh b/include/qpdf/Pl_RunLength.hh
new file mode 100644
index 00000000..86855382
--- /dev/null
+++ b/include/qpdf/Pl_RunLength.hh
@@ -0,0 +1,42 @@
+// Copyright (c) 2005-2015 Jay Berkenbilt
+//
+// This file is part of qpdf. This software may be distributed under
+// the terms of version 2 of the Artistic License which may be found
+// in the source distribution. It is provided "as is" without express
+// or implied warranty.
+
+#ifndef __PL_RUNLENGTH_HH__
+#define __PL_RUNLENGTH_HH__
+
+#include <qpdf/Pipeline.hh>
+
+class Pl_RunLength: public Pipeline
+{
+ public:
+ enum action_e { a_encode, a_decode };
+
+ QPDF_DLL
+ Pl_RunLength(char const* identifier, Pipeline* next,
+ action_e action);
+ QPDF_DLL
+ virtual ~Pl_RunLength();
+
+ QPDF_DLL
+ virtual void write(unsigned char* data, size_t len);
+ QPDF_DLL
+ virtual void finish();
+
+ private:
+ void encode(unsigned char* data, size_t len);
+ void decode(unsigned char* data, size_t len);
+ void flush_encode();
+
+ enum state_e { st_top, st_copying, st_run };
+
+ action_e action;
+ state_e state;
+ unsigned char buf[128];
+ unsigned int length;
+};
+
+#endif // __PL_RUNLENGTH_HH__