From 2d2f61966525cb948bcb6307cccbc3493b1825b5 Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Wed, 16 Aug 2017 06:26:31 -0400 Subject: Implement Pl_RunLength pipeline --- include/qpdf/Pl_RunLength.hh | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 include/qpdf/Pl_RunLength.hh (limited to 'include') 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 + +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__ -- cgit v1.2.3-54-g00ecf