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