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 ICompressGetInStreamProcessedSize, 19 #ifndef NO_READ_FROM_CODER 20 public ICompressSetInStream, 21 public ICompressSetOutStreamSize, 22 public ISequentialInStream, 23 #endif 24 public CMyUnknownImp 25 { 26 CMyComPtr<ISequentialInStream> _inStream; 27 Byte *_inBuf; 28 UInt32 _inPos; 29 UInt32 _inSize; 30 CLzma2Dec _state; 31 bool _outSizeDefined; 32 UInt64 _outSize; 33 UInt64 _inSizeProcessed; 34 UInt64 _outSizeProcessed; 35 public: 36 37 #ifndef NO_READ_FROM_CODER 38 MY_UNKNOWN_IMP5( 39 ICompressSetDecoderProperties2, 40 ICompressGetInStreamProcessedSize, 41 ICompressSetInStream, 42 ICompressSetOutStreamSize, 43 ISequentialInStream) 44 #else 45 MY_UNKNOWN_IMP2( 46 ICompressSetDecoderProperties2, 47 ICompressGetInStreamProcessedSize) 48 #endif 49 50 STDMETHOD(Code)(ISequentialInStream *inStream, 51 ISequentialOutStream *outStream, const UInt64 *_inSize, const UInt64 *outSize, 52 ICompressProgressInfo *progress); 53 54 STDMETHOD(SetDecoderProperties2)(const Byte *data, UInt32 size); 55 56 STDMETHOD(GetInStreamProcessedSize)(UInt64 *value); 57 58 STDMETHOD(SetInStream)(ISequentialInStream *inStream); 59 STDMETHOD(ReleaseInStream)(); 60 STDMETHOD(SetOutStreamSize)(const UInt64 *outSize); 61 62 #ifndef NO_READ_FROM_CODER 63 STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); 64 #endif 65 66 CDecoder(); 67 virtual ~CDecoder(); 68 69 }; 70 71 }} 72 73 #endif 74