rlm@1: // ZlibDecoder.h rlm@1: rlm@1: #ifndef __ZLIB_DECODER_H rlm@1: #define __ZLIB_DECODER_H rlm@1: rlm@1: #include "DeflateDecoder.h" rlm@1: rlm@1: namespace NCompress { rlm@1: namespace NZlib { rlm@1: rlm@1: const UInt32 ADLER_INIT_VAL = 1; rlm@1: rlm@1: class COutStreamWithAdler: rlm@1: public ISequentialOutStream, rlm@1: public CMyUnknownImp rlm@1: { rlm@1: CMyComPtr _stream; rlm@1: UInt32 _adler; rlm@1: public: rlm@1: MY_UNKNOWN_IMP rlm@1: STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); rlm@1: void SetStream(ISequentialOutStream *stream) { _stream = stream; } rlm@1: void ReleaseStream() { _stream.Release(); } rlm@1: void Init() { _adler = ADLER_INIT_VAL; } rlm@1: UInt32 GetAdler() const { return _adler; } rlm@1: }; rlm@1: rlm@1: class CDecoder: rlm@1: public ICompressCoder, rlm@1: public CMyUnknownImp rlm@1: { rlm@1: COutStreamWithAdler *AdlerSpec; rlm@1: CMyComPtr AdlerStream; rlm@1: rlm@1: NCompress::NDeflate::NDecoder::CCOMCoder *DeflateDecoderSpec; rlm@1: CMyComPtr DeflateDecoder; rlm@1: public: rlm@1: STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream, rlm@1: const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress); rlm@1: rlm@1: MY_UNKNOWN_IMP rlm@1: }; rlm@1: rlm@1: }} rlm@1: rlm@1: #endif