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