//======================================================================== // // FlateEncoder.h // // Copyright (C) 2016, William Bader // Copyright (C) 2018, 2019 Albert Astals Cid // // This file is under the GPLv2 or later license // //======================================================================== #ifndef FLATEENCODE_H #define FLATEENCODE_H #include "poppler-config.h" #include #include #include #ifdef HAVE_UNISTD_H # include #endif #include #include #include "goo/gmem.h" #include "goo/gfile.h" #include "Error.h" #include "Object.h" #include "Decrypt.h" #include "Stream.h" extern "C" { #include } //------------------------------------------------------------------------ // FlateEncoder //------------------------------------------------------------------------ class FlateEncoder : public FilterStream { public: FlateEncoder(Stream *strA); ~FlateEncoder() override; StreamKind getKind() const override { return strWeird; } void reset() override; int getChar() override { return (outBufPtr >= outBufEnd && !fillBuf()) ? EOF : (*outBufPtr++ & 0xff); } int lookChar() override { return (outBufPtr >= outBufEnd && !fillBuf()) ? EOF : (*outBufPtr & 0xff); } GooString *getPSFilter(int psLevel, const char *indent) override { return nullptr; } bool isBinary(bool last = true) override { return true; } bool isEncoder() override { return true; } private: static const int inBufSize = 16384; static const int outBufSize = inBufSize; unsigned char inBuf[inBufSize]; unsigned char outBuf[outBufSize]; unsigned char *outBufPtr; unsigned char *outBufEnd; bool inBufEof; bool outBufEof; z_stream zlib_stream; bool fillBuf(); }; #endif