// XzHandler.h | |
#ifndef __XZ_HANDLER_H | |
#define __XZ_HANDLER_H | |
#include "../../../C/Xz.h" | |
#include "../ICoder.h" | |
namespace NArchive { | |
namespace NXz { | |
struct CXzUnpackerCPP | |
{ | |
Byte *InBuf; | |
Byte *OutBuf; | |
CXzUnpacker p; | |
CXzUnpackerCPP(); | |
~CXzUnpackerCPP(); | |
}; | |
struct CStatInfo | |
{ | |
UInt64 InSize; | |
UInt64 OutSize; | |
UInt64 PhySize; | |
UInt64 NumStreams; | |
UInt64 NumBlocks; | |
bool UnpackSize_Defined; | |
bool NumStreams_Defined; | |
bool NumBlocks_Defined; | |
bool IsArc; | |
bool UnexpectedEnd; | |
bool DataAfterEnd; | |
bool Unsupported; | |
bool HeadersError; | |
bool DataError; | |
bool CrcError; | |
CStatInfo() { Clear(); } | |
void Clear(); | |
}; | |
struct CDecoder: public CStatInfo | |
{ | |
CXzUnpackerCPP xzu; | |
SRes DecodeRes; // it's not HRESULT | |
CDecoder(): DecodeRes(SZ_OK) {} | |
/* 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, ICompressProgressInfo *compressProgress); | |
Int32 Get_Extract_OperationResult() const; | |
}; | |
}} | |
#endif |