1// PpmdDecoder.h
2
3#ifndef ZIP7_INC_COMPRESS_PPMD_DECODER_H
4#define ZIP7_INC_COMPRESS_PPMD_DECODER_H
5
6#include "../../../C/Ppmd7.h"
7
8#include "../../Common/MyCom.h"
9
10#include "../ICoder.h"
11
12#include "../Common/CWrappers.h"
13
14namespace NCompress {
15namespace NPpmd {
16
17class CDecoder Z7_final:
18  public ICompressCoder,
19  public ICompressSetDecoderProperties2,
20  public ICompressSetFinishMode,
21  public ICompressGetInStreamProcessedSize,
22 #ifndef Z7_NO_READ_FROM_CODER
23  public ICompressSetInStream,
24  public ICompressSetOutStreamSize,
25  public ISequentialInStream,
26 #endif
27  public CMyUnknownImp
28{
29  Z7_COM_QI_BEGIN2(ICompressCoder)
30  Z7_COM_QI_ENTRY(ICompressSetDecoderProperties2)
31  Z7_COM_QI_ENTRY(ICompressSetFinishMode)
32  Z7_COM_QI_ENTRY(ICompressGetInStreamProcessedSize)
33 #ifndef Z7_NO_READ_FROM_CODER
34  Z7_COM_QI_ENTRY(ICompressSetInStream)
35  Z7_COM_QI_ENTRY(ICompressSetOutStreamSize)
36  Z7_COM_QI_ENTRY(ISequentialInStream)
37 #endif
38  Z7_COM_QI_END
39  Z7_COM_ADDREF_RELEASE
40
41  Z7_IFACE_COM7_IMP(ICompressCoder)
42  Z7_IFACE_COM7_IMP(ICompressSetDecoderProperties2)
43  Z7_IFACE_COM7_IMP(ICompressSetFinishMode)
44  Z7_IFACE_COM7_IMP(ICompressGetInStreamProcessedSize)
45 #ifndef Z7_NO_READ_FROM_CODER
46  Z7_IFACE_COM7_IMP(ICompressSetOutStreamSize)
47  Z7_IFACE_COM7_IMP(ICompressSetInStream)
48  Z7_IFACE_COM7_IMP(ISequentialInStream)
49 #else
50  Z7_COM7F_IMF(SetOutStreamSize(const UInt64 *outSize));
51 #endif
52
53  Byte *_outBuf;
54  CByteInBufWrap _inStream;
55  CPpmd7 _ppmd;
56
57  Byte _order;
58  bool  FinishStream;
59  bool _outSizeDefined;
60  HRESULT _res;
61  int _status;
62  UInt64 _outSize;
63  UInt64 _processedSize;
64
65  HRESULT CodeSpec(Byte *memStream, UInt32 size);
66
67public:
68
69 #ifndef Z7_NO_READ_FROM_CODER
70  CMyComPtr<ISequentialInStream> InSeqStream;
71 #endif
72
73  CDecoder():
74      _outBuf(NULL),
75      FinishStream(false),
76      _outSizeDefined(false)
77  {
78    Ppmd7_Construct(&_ppmd);
79    _ppmd.rc.dec.Stream = &_inStream.vt;
80  }
81
82  ~CDecoder();
83};
84
85}}
86
87#endif
88