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