Index: third_party/lzma/v4_65/files/CPP/7zip/Compress/LzmaEncoder.cpp |
diff --git a/third_party/lzma/v4_65/files/CPP/7zip/Compress/LzmaEncoder.cpp b/third_party/lzma/v4_65/files/CPP/7zip/Compress/LzmaEncoder.cpp |
deleted file mode 100644 |
index 986e1edbb8ba9e6fa45d801c5c5dae068f2c2262..0000000000000000000000000000000000000000 |
--- a/third_party/lzma/v4_65/files/CPP/7zip/Compress/LzmaEncoder.cpp |
+++ /dev/null |
@@ -1,211 +0,0 @@ |
-// LzmaEncoder.cpp |
- |
-#include "StdAfx.h" |
- |
-extern "C" |
-{ |
-#include "../../../C/Alloc.h" |
-} |
- |
-#include "../Common/StreamUtils.h" |
- |
-#include "LzmaEncoder.h" |
- |
-static HRESULT SResToHRESULT(SRes res) |
-{ |
- switch(res) |
- { |
- case SZ_OK: return S_OK; |
- case SZ_ERROR_MEM: return E_OUTOFMEMORY; |
- case SZ_ERROR_PARAM: return E_INVALIDARG; |
- // case SZ_ERROR_THREAD: return E_FAIL; |
- } |
- return E_FAIL; |
-} |
- |
-namespace NCompress { |
-namespace NLzma { |
- |
-static const UInt32 kStreamStepSize = (UInt32)1 << 31; |
- |
-static SRes MyRead(void *object, void *data, size_t *size) |
-{ |
- UInt32 curSize = ((*size < kStreamStepSize) ? (UInt32)*size : kStreamStepSize); |
- HRESULT res = ((CSeqInStream *)object)->RealStream->Read(data, curSize, &curSize); |
- *size = curSize; |
- return (SRes)res; |
-} |
- |
-static size_t MyWrite(void *object, const void *data, size_t size) |
-{ |
- CSeqOutStream *p = (CSeqOutStream *)object; |
- p->Res = WriteStream(p->RealStream, data, size); |
- if (p->Res != 0) |
- return 0; |
- return size; |
-} |
- |
-static void *SzBigAlloc(void *, size_t size) { return BigAlloc(size); } |
-static void SzBigFree(void *, void *address) { BigFree(address); } |
-static ISzAlloc g_BigAlloc = { SzBigAlloc, SzBigFree }; |
- |
-static void *SzAlloc(void *, size_t size) { return MyAlloc(size); } |
-static void SzFree(void *, void *address) { MyFree(address); } |
-static ISzAlloc g_Alloc = { SzAlloc, SzFree }; |
- |
-CEncoder::CEncoder() |
-{ |
- _seqInStream.SeqInStream.Read = MyRead; |
- _seqOutStream.SeqOutStream.Write = MyWrite; |
- _encoder = 0; |
- _encoder = LzmaEnc_Create(&g_Alloc); |
- if (_encoder == 0) |
- throw 1; |
-} |
- |
-CEncoder::~CEncoder() |
-{ |
- if (_encoder != 0) |
- LzmaEnc_Destroy(_encoder, &g_Alloc, &g_BigAlloc); |
-} |
- |
-inline wchar_t GetUpperChar(wchar_t c) |
-{ |
- if (c >= 'a' && c <= 'z') |
- c -= 0x20; |
- return c; |
-} |
- |
-static int ParseMatchFinder(const wchar_t *s, int *btMode, int *numHashBytes) |
-{ |
- wchar_t c = GetUpperChar(*s++); |
- if (c == L'H') |
- { |
- if (GetUpperChar(*s++) != L'C') |
- return 0; |
- int numHashBytesLoc = (int)(*s++ - L'0'); |
- if (numHashBytesLoc < 4 || numHashBytesLoc > 4) |
- return 0; |
- if (*s++ != 0) |
- return 0; |
- *btMode = 0; |
- *numHashBytes = numHashBytesLoc; |
- return 1; |
- } |
- if (c != L'B') |
- return 0; |
- |
- if (GetUpperChar(*s++) != L'T') |
- return 0; |
- int numHashBytesLoc = (int)(*s++ - L'0'); |
- if (numHashBytesLoc < 2 || numHashBytesLoc > 4) |
- return 0; |
- c = GetUpperChar(*s++); |
- if (c != L'\0') |
- return 0; |
- *btMode = 1; |
- *numHashBytes = numHashBytesLoc; |
- return 1; |
-} |
- |
-STDMETHODIMP CEncoder::SetCoderProperties(const PROPID *propIDs, |
- const PROPVARIANT *coderProps, UInt32 numProps) |
-{ |
- CLzmaEncProps props; |
- LzmaEncProps_Init(&props); |
- |
- for (UInt32 i = 0; i < numProps; i++) |
- { |
- const PROPVARIANT &prop = coderProps[i]; |
- switch (propIDs[i]) |
- { |
- case NCoderPropID::kNumFastBytes: |
- if (prop.vt != VT_UI4) return E_INVALIDARG; props.fb = prop.ulVal; break; |
- case NCoderPropID::kMatchFinderCycles: |
- if (prop.vt != VT_UI4) return E_INVALIDARG; props.mc = prop.ulVal; break; |
- case NCoderPropID::kAlgorithm: |
- if (prop.vt != VT_UI4) return E_INVALIDARG; props.algo = prop.ulVal; break; |
- case NCoderPropID::kDictionarySize: |
- if (prop.vt != VT_UI4) return E_INVALIDARG; props.dictSize = prop.ulVal; break; |
- case NCoderPropID::kPosStateBits: |
- if (prop.vt != VT_UI4) return E_INVALIDARG; props.pb = prop.ulVal; break; |
- case NCoderPropID::kLitPosBits: |
- if (prop.vt != VT_UI4) return E_INVALIDARG; props.lp = prop.ulVal; break; |
- case NCoderPropID::kLitContextBits: |
- if (prop.vt != VT_UI4) return E_INVALIDARG; props.lc = prop.ulVal; break; |
- case NCoderPropID::kNumThreads: |
- if (prop.vt != VT_UI4) return E_INVALIDARG; props.numThreads = prop.ulVal; break; |
- case NCoderPropID::kMultiThread: |
- if (prop.vt != VT_BOOL) return E_INVALIDARG; props.numThreads = ((prop.boolVal == VARIANT_TRUE) ? 2 : 1); break; |
- case NCoderPropID::kEndMarker: |
- if (prop.vt != VT_BOOL) return E_INVALIDARG; props.writeEndMark = (prop.boolVal == VARIANT_TRUE); break; |
- case NCoderPropID::kMatchFinder: |
- if (prop.vt != VT_BSTR) return E_INVALIDARG; |
- if (!ParseMatchFinder(prop.bstrVal, &props.btMode, &props.numHashBytes /* , &_matchFinderBase.skipModeBits */)) |
- return E_INVALIDARG; break; |
- default: |
- return E_INVALIDARG; |
- } |
- } |
- return SResToHRESULT(LzmaEnc_SetProps(_encoder, &props)); |
-} |
- |
-STDMETHODIMP CEncoder::WriteCoderProperties(ISequentialOutStream *outStream) |
-{ |
- Byte props[LZMA_PROPS_SIZE]; |
- size_t size = LZMA_PROPS_SIZE; |
- RINOK(LzmaEnc_WriteProperties(_encoder, props, &size)); |
- return WriteStream(outStream, props, size); |
-} |
- |
-STDMETHODIMP CEncoder::SetOutStream(ISequentialOutStream *outStream) |
-{ |
- _seqOutStream.RealStream = outStream; |
- _seqOutStream.Res = S_OK; |
- return S_OK; |
-} |
- |
-STDMETHODIMP CEncoder::ReleaseOutStream() |
-{ |
- _seqOutStream.RealStream.Release(); |
- return S_OK; |
-} |
- |
-typedef struct _CCompressProgressImp |
-{ |
- ICompressProgress p; |
- ICompressProgressInfo *Progress; |
- HRESULT Res; |
-} CCompressProgressImp; |
- |
-#define PROGRESS_UNKNOWN_VALUE ((UInt64)(Int64)-1) |
- |
-#define CONVERT_PR_VAL(x) (x == PROGRESS_UNKNOWN_VALUE ? NULL : &x) |
- |
-SRes CompressProgress(void *pp, UInt64 inSize, UInt64 outSize) |
-{ |
- CCompressProgressImp *p = (CCompressProgressImp *)pp; |
- p->Res = p->Progress->SetRatioInfo(CONVERT_PR_VAL(inSize), CONVERT_PR_VAL(outSize)); |
- return (SRes)p->Res; |
-} |
- |
-STDMETHODIMP CEncoder::Code(ISequentialInStream *inStream, ISequentialOutStream *outStream, |
- const UInt64 * /* inSize */, const UInt64 * /* outSize */, ICompressProgressInfo *progress) |
-{ |
- CCompressProgressImp progressImp; |
- progressImp.p.Progress = CompressProgress; |
- progressImp.Progress = progress; |
- progressImp.Res = SZ_OK; |
- |
- _seqInStream.RealStream = inStream; |
- SetOutStream(outStream); |
- SRes res = LzmaEnc_Encode(_encoder, &_seqOutStream.SeqOutStream, &_seqInStream.SeqInStream, progress ? &progressImp.p : NULL, &g_Alloc, &g_BigAlloc); |
- ReleaseOutStream(); |
- if (res == SZ_ERROR_WRITE && _seqOutStream.Res != S_OK) |
- return _seqOutStream.Res; |
- if (res == SZ_ERROR_PROGRESS && progressImp.Res != S_OK) |
- return progressImp.Res; |
- return SResToHRESULT(res); |
-} |
- |
-}} |