rlm@1
|
1 // PpmdDecoder.h
|
rlm@1
|
2
|
rlm@1
|
3 #ifndef __COMPRESS_PPMD_DECODER_H
|
rlm@1
|
4 #define __COMPRESS_PPMD_DECODER_H
|
rlm@1
|
5
|
rlm@1
|
6 #include "../../Common/MyCom.h"
|
rlm@1
|
7
|
rlm@1
|
8 #include "../ICoder.h"
|
rlm@1
|
9
|
rlm@1
|
10 #include "../Common/OutBuffer.h"
|
rlm@1
|
11
|
rlm@1
|
12 #include "PpmdDecode.h"
|
rlm@1
|
13 #include "RangeCoder.h"
|
rlm@1
|
14
|
rlm@1
|
15 namespace NCompress {
|
rlm@1
|
16 namespace NPpmd {
|
rlm@1
|
17
|
rlm@1
|
18 class CDecoder :
|
rlm@1
|
19 public ICompressCoder,
|
rlm@1
|
20 public ICompressSetDecoderProperties2,
|
rlm@1
|
21 #ifndef NO_READ_FROM_CODER
|
rlm@1
|
22 public ICompressSetInStream,
|
rlm@1
|
23 public ICompressSetOutStreamSize,
|
rlm@1
|
24 public ISequentialInStream,
|
rlm@1
|
25 #endif
|
rlm@1
|
26 public CMyUnknownImp
|
rlm@1
|
27 {
|
rlm@1
|
28 CRangeDecoder _rangeDecoder;
|
rlm@1
|
29
|
rlm@1
|
30 COutBuffer _outStream;
|
rlm@1
|
31
|
rlm@1
|
32 CDecodeInfo _info;
|
rlm@1
|
33
|
rlm@1
|
34 Byte _order;
|
rlm@1
|
35 UInt32 _usedMemorySize;
|
rlm@1
|
36
|
rlm@1
|
37 int _remainLen;
|
rlm@1
|
38 UInt64 _outSize;
|
rlm@1
|
39 bool _outSizeDefined;
|
rlm@1
|
40 UInt64 _processedSize;
|
rlm@1
|
41
|
rlm@1
|
42 HRESULT CodeSpec(UInt32 num, Byte *memStream);
|
rlm@1
|
43
|
rlm@1
|
44 public:
|
rlm@1
|
45
|
rlm@1
|
46 #ifndef NO_READ_FROM_CODER
|
rlm@1
|
47 MY_UNKNOWN_IMP4(
|
rlm@1
|
48 ICompressSetDecoderProperties2,
|
rlm@1
|
49 ICompressSetInStream,
|
rlm@1
|
50 ICompressSetOutStreamSize,
|
rlm@1
|
51 ISequentialInStream)
|
rlm@1
|
52 #else
|
rlm@1
|
53 MY_UNKNOWN_IMP1(
|
rlm@1
|
54 ICompressSetDecoderProperties2)
|
rlm@1
|
55 #endif
|
rlm@1
|
56
|
rlm@1
|
57 void ReleaseStreams()
|
rlm@1
|
58 {
|
rlm@1
|
59 ReleaseInStream();
|
rlm@1
|
60 _outStream.ReleaseStream();
|
rlm@1
|
61 }
|
rlm@1
|
62
|
rlm@1
|
63 HRESULT Flush() { return _outStream.Flush(); }
|
rlm@1
|
64
|
rlm@1
|
65 STDMETHOD(CodeReal)(ISequentialInStream *inStream, ISequentialOutStream *outStream,
|
rlm@1
|
66 const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress);
|
rlm@1
|
67
|
rlm@1
|
68 STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream,
|
rlm@1
|
69 const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress);
|
rlm@1
|
70
|
rlm@1
|
71 STDMETHOD(SetDecoderProperties2)(const Byte *data, UInt32 size);
|
rlm@1
|
72
|
rlm@1
|
73 STDMETHOD(SetInStream)(ISequentialInStream *inStream);
|
rlm@1
|
74 STDMETHOD(ReleaseInStream)();
|
rlm@1
|
75 STDMETHOD(SetOutStreamSize)(const UInt64 *outSize);
|
rlm@1
|
76
|
rlm@1
|
77 #ifndef NO_READ_FROM_CODER
|
rlm@1
|
78 STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
|
rlm@1
|
79 #endif
|
rlm@1
|
80
|
rlm@1
|
81 CDecoder(): _outSizeDefined(false) {}
|
rlm@1
|
82 };
|
rlm@1
|
83
|
rlm@1
|
84 }}
|
rlm@1
|
85
|
rlm@1
|
86 #endif
|