// PpmdZip.h // 2010-03-11 : Igor Pavlov : Public domain #ifndef __COMPRESS_PPMD_ZIP_H #define __COMPRESS_PPMD_ZIP_H #include "../../../C/Alloc.h" #include "../../../C/Ppmd8.h" #include "../../Common/MyCom.h" #include "../Common/CWrappers.h" #include "../ICoder.h" namespace NCompress { namespace NPpmdZip { static const UInt32 kBufSize = (1 << 20); struct CBuf { Byte *Buf; CBuf(): Buf(0) {} ~CBuf() { ::MidFree(Buf); } bool Alloc() { if (!Buf) Buf = (Byte *)::MidAlloc(kBufSize); return (Buf != 0); } }; class CDecoder : public ICompressCoder, public CMyUnknownImp { CByteInBufWrap _inStream; CBuf _outStream; CPpmd8 _ppmd; bool _fullFileMode; public: MY_UNKNOWN_IMP STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream, const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress); CDecoder(bool fullFileMode); ~CDecoder(); }; class CEncoder : public ICompressCoder, public CMyUnknownImp { CByteOutBufWrap _outStream; CBuf _inStream; CPpmd8 _ppmd; UInt32 _usedMemInMB; unsigned _order; unsigned _restor; public: MY_UNKNOWN_IMP STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream, const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress); HRESULT SetCoderProperties(const PROPID *propIDs, const PROPVARIANT *props, UInt32 numProps); CEncoder(); ~CEncoder(); }; }} #endif