Source code

Revision control

Copy as Markdown

Other Tools

// LzmaDecoder.h↩
#ifndef __LZMA_DECODER_H↩
#define __LZMA_DECODER_H↩
// #include "../../../C/Alloc.h"↩
#include "../../../C/LzmaDec.h"
#include "../../Common/MyCom.h"
#include "../ICoder.h"
namespace NCompress {↩
namespace NLzma {↩
class CDecoder:↩
public ICompressCoder,↩
public ICompressSetDecoderProperties2,↩
public ICompressSetFinishMode,↩
public ICompressGetInStreamProcessedSize,↩
public ICompressSetBufSize,↩
#ifndef NO_READ_FROM_CODER↩
public ICompressSetInStream,↩
public ICompressSetOutStreamSize,↩
public ISequentialInStream,↩
#endif
public CMyUnknownImp↩
{↩
Byte *_inBuf;↩
UInt32 _inPos;↩
UInt32 _inLim;↩
ELzmaStatus _lzmaStatus;↩
public:↩
bool FinishStream; // set it before decoding, if you need to decode full LZMA stream↩
private:↩
bool _propsWereSet;↩
bool _outSizeDefined;↩
UInt64 _outSize;↩
UInt64 _inProcessed;↩
UInt64 _outProcessed;↩
UInt32 _outStep;↩
UInt32 _inBufSize;↩
UInt32 _inBufSizeNew;↩
// CAlignOffsetAlloc _alloc;↩
CLzmaDec _state;↩
HRESULT CreateInputBuffer();↩
HRESULT CodeSpec(ISequentialInStream *inStream, ISequentialOutStream *outStream, ICompressProgressInfo *progress);↩
void SetOutStreamSizeResume(const UInt64 *outSize);↩
public:↩
MY_QUERYINTERFACE_BEGIN2(ICompressCoder)↩
MY_QUERYINTERFACE_ENTRY(ICompressSetDecoderProperties2)↩
MY_QUERYINTERFACE_ENTRY(ICompressSetFinishMode)↩
MY_QUERYINTERFACE_ENTRY(ICompressGetInStreamProcessedSize)↩
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(GetInStreamProcessedSize)(UInt64 *value);↩
STDMETHOD(SetOutStreamSize)(const UInt64 *outSize);↩
STDMETHOD(SetInBufSize)(UInt32 streamIndex, UInt32 size);↩
STDMETHOD(SetOutBufSize)(UInt32 streamIndex, UInt32 size);↩
#ifndef NO_READ_FROM_CODER↩
private:↩
CMyComPtr<ISequentialInStream> _inStream;↩
public:↩
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);↩
#endif
UInt64 GetInputProcessedSize() const { return _inProcessed; }↩
CDecoder();↩
virtual ~CDecoder();↩
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);↩
}↩
};↩
}}↩
#endif