1*f6dc9357SAndroid Build Coastguard Worker // LzmaDecoder.h 2*f6dc9357SAndroid Build Coastguard Worker 3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_LZMA_DECODER_H 4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_LZMA_DECODER_H 5*f6dc9357SAndroid Build Coastguard Worker 6*f6dc9357SAndroid Build Coastguard Worker // #include "../../../C/Alloc.h" 7*f6dc9357SAndroid Build Coastguard Worker #include "../../../C/LzmaDec.h" 8*f6dc9357SAndroid Build Coastguard Worker 9*f6dc9357SAndroid Build Coastguard Worker #include "../../Common/MyCom.h" 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 NLzma { 14*f6dc9357SAndroid Build Coastguard Worker 15*f6dc9357SAndroid Build Coastguard Worker class CDecoder Z7_final: 16*f6dc9357SAndroid Build Coastguard Worker public ICompressCoder, 17*f6dc9357SAndroid Build Coastguard Worker public ICompressSetDecoderProperties2, 18*f6dc9357SAndroid Build Coastguard Worker public ICompressSetFinishMode, 19*f6dc9357SAndroid Build Coastguard Worker public ICompressGetInStreamProcessedSize, 20*f6dc9357SAndroid Build Coastguard Worker public ICompressSetBufSize, 21*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_NO_READ_FROM_CODER 22*f6dc9357SAndroid Build Coastguard Worker public ICompressSetInStream, 23*f6dc9357SAndroid Build Coastguard Worker public ICompressSetOutStreamSize, 24*f6dc9357SAndroid Build Coastguard Worker public ISequentialInStream, 25*f6dc9357SAndroid Build Coastguard Worker #endif 26*f6dc9357SAndroid Build Coastguard Worker public CMyUnknownImp 27*f6dc9357SAndroid Build Coastguard Worker { 28*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_BEGIN2(ICompressCoder) 29*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(ICompressSetDecoderProperties2) 30*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(ICompressSetFinishMode) 31*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(ICompressGetInStreamProcessedSize) 32*f6dc9357SAndroid Build Coastguard Worker Z7_COM_QI_ENTRY(ICompressSetBufSize) 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 public: 43*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(ICompressSetDecoderProperties2) 44*f6dc9357SAndroid Build Coastguard Worker private: 45*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(ICompressSetFinishMode) 46*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(ICompressGetInStreamProcessedSize) 47*f6dc9357SAndroid Build Coastguard Worker // Z7_IFACE_COM7_IMP(ICompressSetOutStreamSize) 48*f6dc9357SAndroid Build Coastguard Worker 49*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(ICompressSetBufSize) 50*f6dc9357SAndroid Build Coastguard Worker 51*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_NO_READ_FROM_CODER 52*f6dc9357SAndroid Build Coastguard Worker public: 53*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(ICompressSetInStream) 54*f6dc9357SAndroid Build Coastguard Worker private: 55*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(ISequentialInStream) 56*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(ICompressSetOutStreamSize) 57*f6dc9357SAndroid Build Coastguard Worker #else 58*f6dc9357SAndroid Build Coastguard Worker Z7_COM7F_IMF(SetOutStreamSize(const UInt64 *outSize)); 59*f6dc9357SAndroid Build Coastguard Worker #endif 60*f6dc9357SAndroid Build Coastguard Worker 61*f6dc9357SAndroid Build Coastguard Worker public: 62*f6dc9357SAndroid Build Coastguard Worker bool FinishStream; // set it before decoding, if you need to decode full LZMA stream 63*f6dc9357SAndroid Build Coastguard Worker private: 64*f6dc9357SAndroid Build Coastguard Worker bool _propsWereSet; 65*f6dc9357SAndroid Build Coastguard Worker bool _outSizeDefined; 66*f6dc9357SAndroid Build Coastguard Worker 67*f6dc9357SAndroid Build Coastguard Worker UInt32 _outStep; 68*f6dc9357SAndroid Build Coastguard Worker UInt32 _inBufSize; 69*f6dc9357SAndroid Build Coastguard Worker UInt32 _inBufSizeNew; 70*f6dc9357SAndroid Build Coastguard Worker 71*f6dc9357SAndroid Build Coastguard Worker ELzmaStatus _lzmaStatus; 72*f6dc9357SAndroid Build Coastguard Worker UInt32 _inPos; 73*f6dc9357SAndroid Build Coastguard Worker UInt32 _inLim; 74*f6dc9357SAndroid Build Coastguard Worker Byte *_inBuf; 75*f6dc9357SAndroid Build Coastguard Worker 76*f6dc9357SAndroid Build Coastguard Worker UInt64 _outSize; 77*f6dc9357SAndroid Build Coastguard Worker UInt64 _inProcessed; 78*f6dc9357SAndroid Build Coastguard Worker UInt64 _outProcessed; 79*f6dc9357SAndroid Build Coastguard Worker 80*f6dc9357SAndroid Build Coastguard Worker // CAlignOffsetAlloc _alloc; 81*f6dc9357SAndroid Build Coastguard Worker 82*f6dc9357SAndroid Build Coastguard Worker CLzmaDec _state; 83*f6dc9357SAndroid Build Coastguard Worker 84*f6dc9357SAndroid Build Coastguard Worker HRESULT CreateInputBuffer(); 85*f6dc9357SAndroid Build Coastguard Worker HRESULT CodeSpec(ISequentialInStream *inStream, ISequentialOutStream *outStream, ICompressProgressInfo *progress); 86*f6dc9357SAndroid Build Coastguard Worker void SetOutStreamSizeResume(const UInt64 *outSize); 87*f6dc9357SAndroid Build Coastguard Worker 88*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_NO_READ_FROM_CODER 89*f6dc9357SAndroid Build Coastguard Worker private: 90*f6dc9357SAndroid Build Coastguard Worker CMyComPtr<ISequentialInStream> _inStream; 91*f6dc9357SAndroid Build Coastguard Worker public: 92*f6dc9357SAndroid Build Coastguard Worker HRESULT CodeResume(ISequentialOutStream *outStream, const UInt64 *outSize, ICompressProgressInfo *progress); 93*f6dc9357SAndroid Build Coastguard Worker HRESULT ReadFromInputStream(void *data, UInt32 size, UInt32 *processedSize); 94*f6dc9357SAndroid Build Coastguard Worker #endif 95*f6dc9357SAndroid Build Coastguard Worker 96*f6dc9357SAndroid Build Coastguard Worker public: 97*f6dc9357SAndroid Build Coastguard Worker CDecoder(); 98*f6dc9357SAndroid Build Coastguard Worker ~CDecoder(); 99*f6dc9357SAndroid Build Coastguard Worker GetInputProcessedSize()100*f6dc9357SAndroid Build Coastguard Worker UInt64 GetInputProcessedSize() const { return _inProcessed; } GetOutputProcessedSize()101*f6dc9357SAndroid Build Coastguard Worker UInt64 GetOutputProcessedSize() const { return _outProcessed; } NeedsMoreInput()102*f6dc9357SAndroid Build Coastguard Worker bool NeedsMoreInput() const { return _lzmaStatus == LZMA_STATUS_NEEDS_MORE_INPUT; } CheckFinishStatus(bool withEndMark)103*f6dc9357SAndroid Build Coastguard Worker bool CheckFinishStatus(bool withEndMark) const 104*f6dc9357SAndroid Build Coastguard Worker { 105*f6dc9357SAndroid Build Coastguard Worker return _lzmaStatus == (withEndMark ? 106*f6dc9357SAndroid Build Coastguard Worker LZMA_STATUS_FINISHED_WITH_MARK : 107*f6dc9357SAndroid Build Coastguard Worker LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK); 108*f6dc9357SAndroid Build Coastguard Worker } 109*f6dc9357SAndroid Build Coastguard Worker }; 110*f6dc9357SAndroid Build Coastguard Worker 111*f6dc9357SAndroid Build Coastguard Worker }} 112*f6dc9357SAndroid Build Coastguard Worker 113*f6dc9357SAndroid Build Coastguard Worker #endif 114