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