Home | History | Annotate | Download | only in Compress
      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