1 // Lzma2Decoder.h 2 3 #ifndef __LZMA2_DECODER_H 4 #define __LZMA2_DECODER_H 5 6 #include "../../../C/Lzma2Dec.h" 7 8 #include "../../Common/MyCom.h" 9 10 #include "../ICoder.h" 11 12 namespace NCompress { 13 namespace NLzma2 { 14 15 class CDecoder: 16 public ICompressCoder, 17 public ICompressSetDecoderProperties2, 18 public ICompressSetFinishMode, 19 public ICompressGetInStreamProcessedSize, 20 public ICompressSetBufSize, 21 #ifndef NO_READ_FROM_CODER 22 public ICompressSetInStream, 23 public ICompressSetOutStreamSize, 24 public ISequentialInStream, 25 #endif 26 public CMyUnknownImp 27 { 28 CMyComPtr<ISequentialInStream> _inStream; 29 Byte *_inBuf; 30 UInt32 _inPos; 31 UInt32 _inSize; 32 33 bool _finishMode; 34 bool _outSizeDefined; 35 UInt64 _outSize; 36 37 UInt64 _inSizeProcessed; 38 UInt64 _outSizeProcessed; 39 40 UInt32 _inBufSize; 41 UInt32 _inBufSizeNew; 42 UInt32 _outStepSize; 43 44 CLzma2Dec _state; 45 public: 46 47 MY_QUERYINTERFACE_BEGIN2(ICompressCoder) 48 MY_QUERYINTERFACE_ENTRY(ICompressSetDecoderProperties2) 49 MY_QUERYINTERFACE_ENTRY(ICompressSetFinishMode) 50 MY_QUERYINTERFACE_ENTRY(ICompressGetInStreamProcessedSize) 51 MY_QUERYINTERFACE_ENTRY(ICompressSetBufSize) 52 #ifndef NO_READ_FROM_CODER 53 MY_QUERYINTERFACE_ENTRY(ICompressSetInStream) 54 MY_QUERYINTERFACE_ENTRY(ICompressSetOutStreamSize) 55 MY_QUERYINTERFACE_ENTRY(ISequentialInStream) 56 #endif 57 MY_QUERYINTERFACE_END 58 MY_ADDREF_RELEASE 59 60 STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream, 61 const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress); 62 63 STDMETHOD(SetDecoderProperties2)(const Byte *data, UInt32 size); 64 65 STDMETHOD(SetFinishMode)(UInt32 finishMode); 66 67 STDMETHOD(GetInStreamProcessedSize)(UInt64 *value); 68 69 STDMETHOD(SetInBufSize)(UInt32 streamIndex, UInt32 size); 70 STDMETHOD(SetOutBufSize)(UInt32 streamIndex, UInt32 size); 71 72 STDMETHOD(SetInStream)(ISequentialInStream *inStream); 73 STDMETHOD(ReleaseInStream)(); 74 75 STDMETHOD(SetOutStreamSize)(const UInt64 *outSize); 76 77 #ifndef NO_READ_FROM_CODER 78 STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); 79 #endif 80 81 CDecoder(); 82 virtual ~CDecoder(); 83 84 }; 85 86 }} 87 88 #endif 89