Source code

Revision control

Copy as Markdown

Other Tools

// XzDecoder.h↩
#ifndef __XZ_DECODER_H↩
#define __XZ_DECODER_H↩
#include "../../../C/Xz.h"
#include "../../Common/MyCom.h"
#include "../ICoder.h"
namespace NCompress {↩
namespace NXz {↩
struct CDecoder↩
{↩
CXzDecMtHandle xz;↩
int _tryMt;↩
UInt32 _numThreads;↩
UInt64 _memUsage;↩
SRes MainDecodeSRes; // it's not HRESULT↩
bool MainDecodeSRes_wasUsed;↩
CXzStatInfo Stat;↩
CDecoder():↩
xz(NULL),↩
_tryMt(True),↩
_numThreads(1),↩
_memUsage((UInt64)(sizeof(size_t)) << 28),↩
MainDecodeSRes(SZ_OK),↩
MainDecodeSRes_wasUsed(false)↩
{}↩
~CDecoder()↩
{↩
if (xz)↩
XzDecMt_Destroy(xz);↩
}↩
/* Decode() can return ERROR code only if there is progress or stream error.↩
Decode() returns S_OK in case of xz decoding error, but DecodeRes and CStatInfo contain error information */
HRESULT Decode(ISequentialInStream *seqInStream, ISequentialOutStream *outStream,↩
const UInt64 *outSizeLimit, bool finishStream, ICompressProgressInfo *compressProgress);↩
};↩
class CComDecoder:↩
public ICompressCoder,↩
public ICompressSetFinishMode,↩
public ICompressGetInStreamProcessedSize,↩
#ifndef _7ZIP_ST↩
public ICompressSetCoderMt,↩
public ICompressSetMemLimit,↩
#endif
public CMyUnknownImp,↩
public CDecoder↩
{↩
bool _finishStream;↩
public:↩
MY_QUERYINTERFACE_BEGIN2(ICompressCoder)↩
MY_QUERYINTERFACE_ENTRY(ICompressSetFinishMode)↩
MY_QUERYINTERFACE_ENTRY(ICompressGetInStreamProcessedSize)↩
#ifndef _7ZIP_ST↩
MY_QUERYINTERFACE_ENTRY(ICompressSetCoderMt)↩
MY_QUERYINTERFACE_ENTRY(ICompressSetMemLimit)↩
#endif
MY_QUERYINTERFACE_END↩
MY_ADDREF_RELEASE↩
STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream,↩
const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress);↩
STDMETHOD(SetFinishMode)(UInt32 finishMode);↩
STDMETHOD(GetInStreamProcessedSize)(UInt64 *value);↩
#ifndef _7ZIP_ST↩
STDMETHOD(SetNumberOfThreads)(UInt32 numThreads);↩
STDMETHOD(SetMemLimit)(UInt64 memUsage);↩
#endif
CComDecoder(): _finishStream(false) {}↩
};↩
}}↩
#endif