xref: /aosp_15_r20/external/lzma/CPP/7zip/Compress/XzDecoder.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // XzDecoder.h
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_XZ_DECODER_H
4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_XZ_DECODER_H
5*f6dc9357SAndroid Build Coastguard Worker 
6*f6dc9357SAndroid Build Coastguard Worker #include "../../../C/Xz.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 namespace NCompress {
13*f6dc9357SAndroid Build Coastguard Worker namespace NXz {
14*f6dc9357SAndroid Build Coastguard Worker 
15*f6dc9357SAndroid Build Coastguard Worker struct CDecoder
16*f6dc9357SAndroid Build Coastguard Worker {
17*f6dc9357SAndroid Build Coastguard Worker   CXzDecMtHandle xz;
18*f6dc9357SAndroid Build Coastguard Worker   int _tryMt;
19*f6dc9357SAndroid Build Coastguard Worker   UInt32 _numThreads;
20*f6dc9357SAndroid Build Coastguard Worker   UInt64 _memUsage;
21*f6dc9357SAndroid Build Coastguard Worker 
22*f6dc9357SAndroid Build Coastguard Worker   SRes MainDecodeSRes; // it's not HRESULT
23*f6dc9357SAndroid Build Coastguard Worker   bool MainDecodeSRes_wasUsed;
24*f6dc9357SAndroid Build Coastguard Worker   CXzStatInfo Stat;
25*f6dc9357SAndroid Build Coastguard Worker 
CDecoderCDecoder26*f6dc9357SAndroid Build Coastguard Worker   CDecoder():
27*f6dc9357SAndroid Build Coastguard Worker       xz(NULL),
28*f6dc9357SAndroid Build Coastguard Worker       _tryMt(True),
29*f6dc9357SAndroid Build Coastguard Worker       _numThreads(1),
30*f6dc9357SAndroid Build Coastguard Worker       _memUsage((UInt64)(sizeof(size_t)) << 28),
31*f6dc9357SAndroid Build Coastguard Worker       MainDecodeSRes(SZ_OK),
32*f6dc9357SAndroid Build Coastguard Worker       MainDecodeSRes_wasUsed(false)
33*f6dc9357SAndroid Build Coastguard Worker     {}
34*f6dc9357SAndroid Build Coastguard Worker 
~CDecoderCDecoder35*f6dc9357SAndroid Build Coastguard Worker   ~CDecoder()
36*f6dc9357SAndroid Build Coastguard Worker   {
37*f6dc9357SAndroid Build Coastguard Worker     if (xz)
38*f6dc9357SAndroid Build Coastguard Worker       XzDecMt_Destroy(xz);
39*f6dc9357SAndroid Build Coastguard Worker   }
40*f6dc9357SAndroid Build Coastguard Worker 
41*f6dc9357SAndroid Build Coastguard Worker   /* Decode() can return S_OK, if there is data after good xz streams, and that data is not new xz stream.
42*f6dc9357SAndroid Build Coastguard Worker      check also (Stat.DataAfterEnd) flag */
43*f6dc9357SAndroid Build Coastguard Worker 
44*f6dc9357SAndroid Build Coastguard Worker   HRESULT Decode(ISequentialInStream *seqInStream, ISequentialOutStream *outStream,
45*f6dc9357SAndroid Build Coastguard Worker       const UInt64 *outSizeLimit, bool finishStream, ICompressProgressInfo *compressProgress);
46*f6dc9357SAndroid Build Coastguard Worker };
47*f6dc9357SAndroid Build Coastguard Worker 
48*f6dc9357SAndroid Build Coastguard Worker 
49*f6dc9357SAndroid Build Coastguard Worker class CComDecoder Z7_final:
50*f6dc9357SAndroid Build Coastguard Worker   public ICompressCoder,
51*f6dc9357SAndroid Build Coastguard Worker   public ICompressSetFinishMode,
52*f6dc9357SAndroid Build Coastguard Worker   public ICompressGetInStreamProcessedSize,
53*f6dc9357SAndroid Build Coastguard Worker  #ifndef Z7_ST
54*f6dc9357SAndroid Build Coastguard Worker   public ICompressSetCoderMt,
55*f6dc9357SAndroid Build Coastguard Worker   public ICompressSetMemLimit,
56*f6dc9357SAndroid Build Coastguard Worker  #endif
57*f6dc9357SAndroid Build Coastguard Worker   public CMyUnknownImp,
58*f6dc9357SAndroid Build Coastguard Worker   public CDecoder
59*f6dc9357SAndroid Build Coastguard Worker {
60*f6dc9357SAndroid Build Coastguard Worker   Z7_COM_QI_BEGIN2(ICompressCoder)
61*f6dc9357SAndroid Build Coastguard Worker   Z7_COM_QI_ENTRY(ICompressSetFinishMode)
62*f6dc9357SAndroid Build Coastguard Worker   Z7_COM_QI_ENTRY(ICompressGetInStreamProcessedSize)
63*f6dc9357SAndroid Build Coastguard Worker  #ifndef Z7_ST
64*f6dc9357SAndroid Build Coastguard Worker   Z7_COM_QI_ENTRY(ICompressSetCoderMt)
65*f6dc9357SAndroid Build Coastguard Worker   Z7_COM_QI_ENTRY(ICompressSetMemLimit)
66*f6dc9357SAndroid Build Coastguard Worker  #endif
67*f6dc9357SAndroid Build Coastguard Worker   Z7_COM_QI_END
68*f6dc9357SAndroid Build Coastguard Worker   Z7_COM_ADDREF_RELEASE
69*f6dc9357SAndroid Build Coastguard Worker 
70*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(ICompressCoder)
71*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(ICompressSetFinishMode)
72*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(ICompressGetInStreamProcessedSize)
73*f6dc9357SAndroid Build Coastguard Worker  #ifndef Z7_ST
74*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(ICompressSetCoderMt)
75*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(ICompressSetMemLimit)
76*f6dc9357SAndroid Build Coastguard Worker  #endif
77*f6dc9357SAndroid Build Coastguard Worker 
78*f6dc9357SAndroid Build Coastguard Worker   bool _finishStream;
79*f6dc9357SAndroid Build Coastguard Worker 
80*f6dc9357SAndroid Build Coastguard Worker public:
CComDecoder()81*f6dc9357SAndroid Build Coastguard Worker   CComDecoder(): _finishStream(false) {}
82*f6dc9357SAndroid Build Coastguard Worker };
83*f6dc9357SAndroid Build Coastguard Worker 
84*f6dc9357SAndroid Build Coastguard Worker }}
85*f6dc9357SAndroid Build Coastguard Worker 
86*f6dc9357SAndroid Build Coastguard Worker #endif
87