Files
easy7zip/CPP/7zip/Compress/ZstdEncoder.h
2016-07-04 08:23:11 +02:00

78 lines
1.7 KiB
C++

// ZstdEncoder.h
// (C) 2016 Rich Geldreich, Tino Reichardt
#include "StdAfx.h"
#define ZSTD_STATIC_LINKING_ONLY
#include "../../../C/Alloc.h"
#include "../../../C/ZStd/zstd.h"
#include "../../../C/ZStd/zbuff.h"
#include "../../Common/Common.h"
#include "../../Common/MyCom.h"
#include "../ICoder.h"
#include "../Common/StreamUtils.h"
#ifndef EXTRACT_ONLY
namespace NCompress {
namespace NZSTD {
struct CProps
{
CProps() { clear (); }
void clear ()
{
memset (this, 0, sizeof (*this));
_ver_major = ZSTD_VERSION_MAJOR;
_ver_minor = ZSTD_VERSION_MINOR;
_level = 1;
}
Byte _ver_major;
Byte _ver_minor;
Byte _level;
Byte _reserved[2];
};
class CEncoder:
public ICompressCoder,
public ICompressSetCoderProperties,
public ICompressWriteCoderProperties,
public CMyUnknownImp
{
ZBUFF_CCtx *_state;
CProps _props;
Byte *_inBuf;
Byte *_outBuf;
UInt32 _inPos;
UInt32 _inSize;
UInt32 _inBufSizeAllocated;
UInt32 _outBufSizeAllocated;
UInt32 _inBufSize;
UInt32 _outBufSize;
UInt64 _inSizeProcessed;
UInt64 _outSizeProcessed;
HRESULT CreateCompressor ();
HRESULT CreateBuffers ();
public:
MY_UNKNOWN_IMP2 (ICompressSetCoderProperties, ICompressWriteCoderProperties)
STDMETHOD (Code) (ISequentialInStream * inStream, ISequentialOutStream *
outStream, const UInt64 * inSize, const UInt64 * outSize,
ICompressProgressInfo * progress);
STDMETHOD (SetCoderProperties) (const PROPID * propIDs,
const PROPVARIANT *props, UInt32 numProps);
STDMETHOD (WriteCoderProperties) (ISequentialOutStream * outStream);
CEncoder();
virtual ~CEncoder();
};
}}
#endif