Index: third_party/lzma/v4_65/files/CPP/7zip/Archive/7z/7zDecode.cpp |
diff --git a/third_party/lzma/v4_65/files/CPP/7zip/Archive/7z/7zDecode.cpp b/third_party/lzma/v4_65/files/CPP/7zip/Archive/7z/7zDecode.cpp |
deleted file mode 100644 |
index 2d25ff2ec54e79092ef9d4c13b1ba5c20223068f..0000000000000000000000000000000000000000 |
--- a/third_party/lzma/v4_65/files/CPP/7zip/Archive/7z/7zDecode.cpp |
+++ /dev/null |
@@ -1,332 +0,0 @@ |
-// 7zDecode.cpp |
- |
-#include "StdAfx.h" |
- |
-#include "../../Common/LimitedStreams.h" |
-#include "../../Common/LockedStream.h" |
-#include "../../Common/ProgressUtils.h" |
-#include "../../Common/StreamObjects.h" |
- |
-#include "7zDecode.h" |
- |
-namespace NArchive { |
-namespace N7z { |
- |
-static void ConvertFolderItemInfoToBindInfo(const CFolder &folder, |
- CBindInfoEx &bindInfo) |
-{ |
- bindInfo.Clear(); |
- int i; |
- for (i = 0; i < folder.BindPairs.Size(); i++) |
- { |
- NCoderMixer::CBindPair bindPair; |
- bindPair.InIndex = (UInt32)folder.BindPairs[i].InIndex; |
- bindPair.OutIndex = (UInt32)folder.BindPairs[i].OutIndex; |
- bindInfo.BindPairs.Add(bindPair); |
- } |
- UInt32 outStreamIndex = 0; |
- for (i = 0; i < folder.Coders.Size(); i++) |
- { |
- NCoderMixer::CCoderStreamsInfo coderStreamsInfo; |
- const CCoderInfo &coderInfo = folder.Coders[i]; |
- coderStreamsInfo.NumInStreams = (UInt32)coderInfo.NumInStreams; |
- coderStreamsInfo.NumOutStreams = (UInt32)coderInfo.NumOutStreams; |
- bindInfo.Coders.Add(coderStreamsInfo); |
- bindInfo.CoderMethodIDs.Add(coderInfo.MethodID); |
- for (UInt32 j = 0; j < coderStreamsInfo.NumOutStreams; j++, outStreamIndex++) |
- if (folder.FindBindPairForOutStream(outStreamIndex) < 0) |
- bindInfo.OutStreams.Add(outStreamIndex); |
- } |
- for (i = 0; i < folder.PackStreams.Size(); i++) |
- bindInfo.InStreams.Add((UInt32)folder.PackStreams[i]); |
-} |
- |
-static bool AreCodersEqual(const NCoderMixer::CCoderStreamsInfo &a1, |
- const NCoderMixer::CCoderStreamsInfo &a2) |
-{ |
- return (a1.NumInStreams == a2.NumInStreams) && |
- (a1.NumOutStreams == a2.NumOutStreams); |
-} |
- |
-static bool AreBindPairsEqual(const NCoderMixer::CBindPair &a1, const NCoderMixer::CBindPair &a2) |
-{ |
- return (a1.InIndex == a2.InIndex) && |
- (a1.OutIndex == a2.OutIndex); |
-} |
- |
-static bool AreBindInfoExEqual(const CBindInfoEx &a1, const CBindInfoEx &a2) |
-{ |
- if (a1.Coders.Size() != a2.Coders.Size()) |
- return false; |
- int i; |
- for (i = 0; i < a1.Coders.Size(); i++) |
- if (!AreCodersEqual(a1.Coders[i], a2.Coders[i])) |
- return false; |
- if (a1.BindPairs.Size() != a2.BindPairs.Size()) |
- return false; |
- for (i = 0; i < a1.BindPairs.Size(); i++) |
- if (!AreBindPairsEqual(a1.BindPairs[i], a2.BindPairs[i])) |
- return false; |
- for (i = 0; i < a1.CoderMethodIDs.Size(); i++) |
- if (a1.CoderMethodIDs[i] != a2.CoderMethodIDs[i]) |
- return false; |
- if (a1.InStreams.Size() != a2.InStreams.Size()) |
- return false; |
- if (a1.OutStreams.Size() != a2.OutStreams.Size()) |
- return false; |
- return true; |
-} |
- |
-CDecoder::CDecoder(bool multiThread) |
-{ |
- #ifndef _ST_MODE |
- multiThread = true; |
- #endif |
- _multiThread = multiThread; |
- _bindInfoExPrevIsDefined = false; |
-} |
- |
-HRESULT CDecoder::Decode( |
- DECL_EXTERNAL_CODECS_LOC_VARS |
- IInStream *inStream, |
- UInt64 startPos, |
- const UInt64 *packSizes, |
- const CFolder &folderInfo, |
- ISequentialOutStream *outStream, |
- ICompressProgressInfo *compressProgress |
- #ifndef _NO_CRYPTO |
- , ICryptoGetTextPassword *getTextPassword, bool &passwordIsDefined |
- #endif |
- #ifdef COMPRESS_MT |
- , bool mtMode, UInt32 numThreads |
- #endif |
- ) |
-{ |
- if (!folderInfo.CheckStructure()) |
- return E_NOTIMPL; |
- #ifndef _NO_CRYPTO |
- passwordIsDefined = false; |
- #endif |
- CObjectVector< CMyComPtr<ISequentialInStream> > inStreams; |
- |
- CLockedInStream lockedInStream; |
- lockedInStream.Init(inStream); |
- |
- for (int j = 0; j < folderInfo.PackStreams.Size(); j++) |
- { |
- CLockedSequentialInStreamImp *lockedStreamImpSpec = new |
- CLockedSequentialInStreamImp; |
- CMyComPtr<ISequentialInStream> lockedStreamImp = lockedStreamImpSpec; |
- lockedStreamImpSpec->Init(&lockedInStream, startPos); |
- startPos += packSizes[j]; |
- |
- CLimitedSequentialInStream *streamSpec = new |
- CLimitedSequentialInStream; |
- CMyComPtr<ISequentialInStream> inStream = streamSpec; |
- streamSpec->SetStream(lockedStreamImp); |
- streamSpec->Init(packSizes[j]); |
- inStreams.Add(inStream); |
- } |
- |
- int numCoders = folderInfo.Coders.Size(); |
- |
- CBindInfoEx bindInfo; |
- ConvertFolderItemInfoToBindInfo(folderInfo, bindInfo); |
- bool createNewCoders; |
- if (!_bindInfoExPrevIsDefined) |
- createNewCoders = true; |
- else |
- createNewCoders = !AreBindInfoExEqual(bindInfo, _bindInfoExPrev); |
- if (createNewCoders) |
- { |
- int i; |
- _decoders.Clear(); |
- // _decoders2.Clear(); |
- |
- _mixerCoder.Release(); |
- |
- if (_multiThread) |
- { |
- _mixerCoderMTSpec = new NCoderMixer::CCoderMixer2MT; |
- _mixerCoder = _mixerCoderMTSpec; |
- _mixerCoderCommon = _mixerCoderMTSpec; |
- } |
- else |
- { |
- #ifdef _ST_MODE |
- _mixerCoderSTSpec = new NCoderMixer::CCoderMixer2ST; |
- _mixerCoder = _mixerCoderSTSpec; |
- _mixerCoderCommon = _mixerCoderSTSpec; |
- #endif |
- } |
- RINOK(_mixerCoderCommon->SetBindInfo(bindInfo)); |
- |
- for (i = 0; i < numCoders; i++) |
- { |
- const CCoderInfo &coderInfo = folderInfo.Coders[i]; |
- |
- |
- CMyComPtr<ICompressCoder> decoder; |
- CMyComPtr<ICompressCoder2> decoder2; |
- RINOK(CreateCoder( |
- EXTERNAL_CODECS_LOC_VARS |
- coderInfo.MethodID, decoder, decoder2, false)); |
- CMyComPtr<IUnknown> decoderUnknown; |
- if (coderInfo.IsSimpleCoder()) |
- { |
- if (decoder == 0) |
- return E_NOTIMPL; |
- |
- decoderUnknown = (IUnknown *)decoder; |
- |
- if (_multiThread) |
- _mixerCoderMTSpec->AddCoder(decoder); |
- #ifdef _ST_MODE |
- else |
- _mixerCoderSTSpec->AddCoder(decoder, false); |
- #endif |
- } |
- else |
- { |
- if (decoder2 == 0) |
- return E_NOTIMPL; |
- decoderUnknown = (IUnknown *)decoder2; |
- if (_multiThread) |
- _mixerCoderMTSpec->AddCoder2(decoder2); |
- #ifdef _ST_MODE |
- else |
- _mixerCoderSTSpec->AddCoder2(decoder2, false); |
- #endif |
- } |
- _decoders.Add(decoderUnknown); |
- #ifdef EXTERNAL_CODECS |
- CMyComPtr<ISetCompressCodecsInfo> setCompressCodecsInfo; |
- decoderUnknown.QueryInterface(IID_ISetCompressCodecsInfo, (void **)&setCompressCodecsInfo); |
- if (setCompressCodecsInfo) |
- { |
- RINOK(setCompressCodecsInfo->SetCompressCodecsInfo(codecsInfo)); |
- } |
- #endif |
- } |
- _bindInfoExPrev = bindInfo; |
- _bindInfoExPrevIsDefined = true; |
- } |
- int i; |
- _mixerCoderCommon->ReInit(); |
- |
- UInt32 packStreamIndex = 0, unpackStreamIndex = 0; |
- UInt32 coderIndex = 0; |
- // UInt32 coder2Index = 0; |
- |
- for (i = 0; i < numCoders; i++) |
- { |
- const CCoderInfo &coderInfo = folderInfo.Coders[i]; |
- CMyComPtr<IUnknown> &decoder = _decoders[coderIndex]; |
- |
- { |
- CMyComPtr<ICompressSetDecoderProperties2> setDecoderProperties; |
- decoder.QueryInterface(IID_ICompressSetDecoderProperties2, &setDecoderProperties); |
- if (setDecoderProperties) |
- { |
- const CByteBuffer &props = coderInfo.Props; |
- size_t size = props.GetCapacity(); |
- if (size > 0xFFFFFFFF) |
- return E_NOTIMPL; |
- if (size > 0) |
- { |
- RINOK(setDecoderProperties->SetDecoderProperties2((const Byte *)props, (UInt32)size)); |
- } |
- } |
- } |
- |
- #ifdef COMPRESS_MT |
- if (mtMode) |
- { |
- CMyComPtr<ICompressSetCoderMt> setCoderMt; |
- decoder.QueryInterface(IID_ICompressSetCoderMt, &setCoderMt); |
- if (setCoderMt) |
- { |
- RINOK(setCoderMt->SetNumberOfThreads(numThreads)); |
- } |
- } |
- #endif |
- |
- #ifndef _NO_CRYPTO |
- { |
- CMyComPtr<ICryptoSetPassword> cryptoSetPassword; |
- decoder.QueryInterface(IID_ICryptoSetPassword, &cryptoSetPassword); |
- if (cryptoSetPassword) |
- { |
- if (getTextPassword == 0) |
- return E_FAIL; |
- CMyComBSTR passwordBSTR; |
- RINOK(getTextPassword->CryptoGetTextPassword(&passwordBSTR)); |
- CByteBuffer buffer; |
- passwordIsDefined = true; |
- const UString password(passwordBSTR); |
- const UInt32 sizeInBytes = password.Length() * 2; |
- buffer.SetCapacity(sizeInBytes); |
- for (int i = 0; i < password.Length(); i++) |
- { |
- wchar_t c = password[i]; |
- ((Byte *)buffer)[i * 2] = (Byte)c; |
- ((Byte *)buffer)[i * 2 + 1] = (Byte)(c >> 8); |
- } |
- RINOK(cryptoSetPassword->CryptoSetPassword((const Byte *)buffer, sizeInBytes)); |
- } |
- } |
- #endif |
- |
- coderIndex++; |
- |
- UInt32 numInStreams = (UInt32)coderInfo.NumInStreams; |
- UInt32 numOutStreams = (UInt32)coderInfo.NumOutStreams; |
- CRecordVector<const UInt64 *> packSizesPointers; |
- CRecordVector<const UInt64 *> unpackSizesPointers; |
- packSizesPointers.Reserve(numInStreams); |
- unpackSizesPointers.Reserve(numOutStreams); |
- UInt32 j; |
- for (j = 0; j < numOutStreams; j++, unpackStreamIndex++) |
- unpackSizesPointers.Add(&folderInfo.UnpackSizes[unpackStreamIndex]); |
- |
- for (j = 0; j < numInStreams; j++, packStreamIndex++) |
- { |
- int bindPairIndex = folderInfo.FindBindPairForInStream(packStreamIndex); |
- if (bindPairIndex >= 0) |
- packSizesPointers.Add( |
- &folderInfo.UnpackSizes[(UInt32)folderInfo.BindPairs[bindPairIndex].OutIndex]); |
- else |
- { |
- int index = folderInfo.FindPackStreamArrayIndex(packStreamIndex); |
- if (index < 0) |
- return E_FAIL; |
- packSizesPointers.Add(&packSizes[index]); |
- } |
- } |
- |
- _mixerCoderCommon->SetCoderInfo(i, |
- &packSizesPointers.Front(), |
- &unpackSizesPointers.Front()); |
- } |
- UInt32 mainCoder, temp; |
- bindInfo.FindOutStream(bindInfo.OutStreams[0], mainCoder, temp); |
- |
- if (_multiThread) |
- _mixerCoderMTSpec->SetProgressCoderIndex(mainCoder); |
- /* |
- else |
- _mixerCoderSTSpec->SetProgressCoderIndex(mainCoder);; |
- */ |
- |
- if (numCoders == 0) |
- return 0; |
- CRecordVector<ISequentialInStream *> inStreamPointers; |
- inStreamPointers.Reserve(inStreams.Size()); |
- for (i = 0; i < inStreams.Size(); i++) |
- inStreamPointers.Add(inStreams[i]); |
- ISequentialOutStream *outStreamPointer = outStream; |
- return _mixerCoder->Code(&inStreamPointers.Front(), NULL, |
- inStreams.Size(), &outStreamPointer, NULL, 1, compressProgress); |
-} |
- |
-}} |