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