Imported Upstream version 9.20
[platform/upstream/7zip.git] / CPP / 7zip / Compress / PpmdZip.h
1 // PpmdZip.h\r
2 // 2010-03-11 : Igor Pavlov : Public domain\r
3 \r
4 #ifndef __COMPRESS_PPMD_ZIP_H\r
5 #define __COMPRESS_PPMD_ZIP_H\r
6 \r
7 #include "../../../C/Alloc.h"\r
8 #include "../../../C/Ppmd8.h"\r
9 \r
10 #include "../../Common/MyCom.h"\r
11 \r
12 #include "../Common/CWrappers.h"\r
13 \r
14 #include "../ICoder.h"\r
15 \r
16 namespace NCompress {\r
17 namespace NPpmdZip {\r
18 \r
19 static const UInt32 kBufSize = (1 << 20);\r
20 \r
21 struct CBuf\r
22 {\r
23   Byte *Buf;\r
24   \r
25   CBuf(): Buf(0) {}\r
26   ~CBuf() { ::MidFree(Buf); }\r
27   bool Alloc()\r
28   {\r
29     if (!Buf)\r
30       Buf = (Byte *)::MidAlloc(kBufSize);\r
31     return (Buf != 0);\r
32   }\r
33 };\r
34 \r
35 class CDecoder :\r
36   public ICompressCoder,\r
37   public CMyUnknownImp\r
38 {\r
39   CByteInBufWrap _inStream;\r
40   CBuf _outStream;\r
41   CPpmd8 _ppmd;\r
42   bool _fullFileMode;\r
43 public:\r
44   MY_UNKNOWN_IMP\r
45   STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream,\r
46       const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress);\r
47   CDecoder(bool fullFileMode);\r
48   ~CDecoder();\r
49 };\r
50 \r
51 class CEncoder :\r
52   public ICompressCoder,\r
53   public CMyUnknownImp\r
54 {\r
55   CByteOutBufWrap _outStream;\r
56   CBuf _inStream;\r
57   CPpmd8 _ppmd;\r
58   UInt32 _usedMemInMB;\r
59   unsigned _order;\r
60   unsigned _restor;\r
61 public:\r
62   MY_UNKNOWN_IMP\r
63   STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream,\r
64       const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress);\r
65   HRESULT SetCoderProperties(const PROPID *propIDs, const PROPVARIANT *props, UInt32 numProps);\r
66   CEncoder();\r
67   ~CEncoder();\r
68 };\r
69 \r
70 }}\r
71 \r
72 #endif\r