summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/lzma/CPP/7zip/Compress/LzmaDecoder.h
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/lzma/CPP/7zip/Compress/LzmaDecoder.h')
-rw-r--r--3rdparty/lzma/CPP/7zip/Compress/LzmaDecoder.h126
1 files changed, 74 insertions, 52 deletions
diff --git a/3rdparty/lzma/CPP/7zip/Compress/LzmaDecoder.h b/3rdparty/lzma/CPP/7zip/Compress/LzmaDecoder.h
index f1f839a4f1b..095e76ff3a4 100644
--- a/3rdparty/lzma/CPP/7zip/Compress/LzmaDecoder.h
+++ b/3rdparty/lzma/CPP/7zip/Compress/LzmaDecoder.h
@@ -1,8 +1,9 @@
// LzmaDecoder.h
-#ifndef __LZMA_DECODER_H
-#define __LZMA_DECODER_H
+#ifndef ZIP7_INC_LZMA_DECODER_H
+#define ZIP7_INC_LZMA_DECODER_H
+// #include "../../../C/Alloc.h"
#include "../../../C/LzmaDec.h"
#include "../../Common/MyCom.h"
@@ -11,79 +12,100 @@
namespace NCompress {
namespace NLzma {
-class CDecoder:
+class CDecoder Z7_final:
public ICompressCoder,
public ICompressSetDecoderProperties2,
public ICompressSetFinishMode,
+ public ICompressGetInStreamProcessedSize,
public ICompressSetBufSize,
- #ifndef NO_READ_FROM_CODER
+ #ifndef Z7_NO_READ_FROM_CODER
public ICompressSetInStream,
public ICompressSetOutStreamSize,
public ISequentialInStream,
- #endif
+ #endif
public CMyUnknownImp
{
- CMyComPtr<ISequentialInStream> _inStream;
- Byte *_inBuf;
- UInt32 _inPos;
- UInt32 _inSize;
- CLzmaDec _state;
+ Z7_COM_QI_BEGIN2(ICompressCoder)
+ Z7_COM_QI_ENTRY(ICompressSetDecoderProperties2)
+ Z7_COM_QI_ENTRY(ICompressSetFinishMode)
+ Z7_COM_QI_ENTRY(ICompressGetInStreamProcessedSize)
+ Z7_COM_QI_ENTRY(ICompressSetBufSize)
+ #ifndef Z7_NO_READ_FROM_CODER
+ Z7_COM_QI_ENTRY(ICompressSetInStream)
+ Z7_COM_QI_ENTRY(ICompressSetOutStreamSize)
+ Z7_COM_QI_ENTRY(ISequentialInStream)
+ #endif
+ Z7_COM_QI_END
+ Z7_COM_ADDREF_RELEASE
+
+ Z7_IFACE_COM7_IMP(ICompressCoder)
+public:
+ Z7_IFACE_COM7_IMP(ICompressSetDecoderProperties2)
+private:
+ Z7_IFACE_COM7_IMP(ICompressSetFinishMode)
+ Z7_IFACE_COM7_IMP(ICompressGetInStreamProcessedSize)
+ // Z7_IFACE_COM7_IMP(ICompressSetOutStreamSize)
+
+ Z7_IFACE_COM7_IMP(ICompressSetBufSize)
+
+ #ifndef Z7_NO_READ_FROM_CODER
+public:
+ Z7_IFACE_COM7_IMP(ICompressSetInStream)
+private:
+ Z7_IFACE_COM7_IMP(ISequentialInStream)
+ Z7_IFACE_COM7_IMP(ICompressSetOutStreamSize)
+ #else
+ Z7_COM7F_IMF(SetOutStreamSize(const UInt64 *outSize));
+ #endif
+
+public:
+ bool FinishStream; // set it before decoding, if you need to decode full LZMA stream
+private:
bool _propsWereSet;
bool _outSizeDefined;
- UInt64 _outSize;
- UInt64 _inSizeProcessed;
- UInt64 _outSizeProcessed;
- UInt32 _inBufSizeAllocated;
+ UInt32 _outStep;
UInt32 _inBufSize;
- UInt32 _outBufSize;
- SizeT _wrPos;
+ UInt32 _inBufSizeNew;
+
+ ELzmaStatus _lzmaStatus;
+ UInt32 _inPos;
+ UInt32 _inLim;
+ Byte *_inBuf;
+
+ UInt64 _outSize;
+ UInt64 _inProcessed;
+ UInt64 _outProcessed;
+
+ // CAlignOffsetAlloc _alloc;
+
+ CLzmaDec _state;
HRESULT CreateInputBuffer();
HRESULT CodeSpec(ISequentialInStream *inStream, ISequentialOutStream *outStream, ICompressProgressInfo *progress);
void SetOutStreamSizeResume(const UInt64 *outSize);
+ #ifndef Z7_NO_READ_FROM_CODER
+private:
+ CMyComPtr<ISequentialInStream> _inStream;
public:
- MY_QUERYINTERFACE_BEGIN2(ICompressCoder)
- MY_QUERYINTERFACE_ENTRY(ICompressSetDecoderProperties2)
- MY_QUERYINTERFACE_ENTRY(ICompressSetFinishMode)
- MY_QUERYINTERFACE_ENTRY(ICompressSetBufSize)
- #ifndef NO_READ_FROM_CODER
- MY_QUERYINTERFACE_ENTRY(ICompressSetInStream)
- MY_QUERYINTERFACE_ENTRY(ICompressSetOutStreamSize)
- MY_QUERYINTERFACE_ENTRY(ISequentialInStream)
- #endif
- MY_QUERYINTERFACE_END
- MY_ADDREF_RELEASE
-
- STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream,
- const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress);
- STDMETHOD(SetDecoderProperties2)(const Byte *data, UInt32 size);
- STDMETHOD(SetFinishMode)(UInt32 finishMode);
- STDMETHOD(SetOutStreamSize)(const UInt64 *outSize);
- STDMETHOD(SetInBufSize)(UInt32 streamIndex, UInt32 size);
- STDMETHOD(SetOutBufSize)(UInt32 streamIndex, UInt32 size);
-
- #ifndef NO_READ_FROM_CODER
-
- STDMETHOD(SetInStream)(ISequentialInStream *inStream);
- STDMETHOD(ReleaseInStream)();
- STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
-
HRESULT CodeResume(ISequentialOutStream *outStream, const UInt64 *outSize, ICompressProgressInfo *progress);
HRESULT ReadFromInputStream(void *data, UInt32 size, UInt32 *processedSize);
- UInt64 GetInputProcessedSize() const { return _inSizeProcessed; }
-
- #endif
-
- bool FinishStream; // set it before decoding, if you need to decode full LZMA stream
-
- bool NeedMoreInput; // it's set by decoder, if it needs more input data to decode stream
+ #endif
+public:
CDecoder();
- virtual ~CDecoder();
-
- UInt64 GetOutputProcessedSize() const { return _outSizeProcessed; }
+ ~CDecoder();
+
+ UInt64 GetInputProcessedSize() const { return _inProcessed; }
+ UInt64 GetOutputProcessedSize() const { return _outProcessed; }
+ bool NeedsMoreInput() const { return _lzmaStatus == LZMA_STATUS_NEEDS_MORE_INPUT; }
+ bool CheckFinishStatus(bool withEndMark) const
+ {
+ return _lzmaStatus == (withEndMark ?
+ LZMA_STATUS_FINISHED_WITH_MARK :
+ LZMA_STATUS_MAYBE_FINISHED_WITHOUT_MARK);
+ }
};
}}