diff options
author | Jay Berkenbilt <ejb@ql.org> | 2017-08-16 12:26:31 +0200 |
---|---|---|
committer | Jay Berkenbilt <ejb@ql.org> | 2017-08-19 20:50:55 +0200 |
commit | 2d2f61966525cb948bcb6307cccbc3493b1825b5 (patch) | |
tree | 862dbdd156d2af563d0d20f755f7abeb2c200889 /include | |
parent | e0d1cd1f4b2de30967f9c70460c2d0765f003676 (diff) | |
download | qpdf-2d2f61966525cb948bcb6307cccbc3493b1825b5.tar.zst |
Implement Pl_RunLength pipeline
Diffstat (limited to 'include')
-rw-r--r-- | include/qpdf/Pl_RunLength.hh | 42 |
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__ |