亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 7zdecode.cpp

?? 壓縮解壓工具7-zip源代碼
?? CPP
字號:
// 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);
}

}}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜av一区二区| 狠狠色丁香婷婷综合久久片| 欧美一级艳片视频免费观看| eeuss国产一区二区三区| 日韩成人精品在线| 亚洲人成人一区二区在线观看| 欧美不卡123| 欧美系列在线观看| 99久久99久久精品国产片果冻| 麻豆专区一区二区三区四区五区| 亚洲色图都市小说| 国产日韩欧美精品一区| 日韩视频中午一区| 欧美日韩日日骚| 色天使久久综合网天天| 风间由美一区二区av101| 久久国产乱子精品免费女| 亚洲国产一区二区视频| 国产精品久久毛片a| 国产视频一区二区在线观看| 日韩一区二区精品在线观看| 欧美日韩精品三区| 欧美视频你懂的| 91久久精品国产91性色tv| 97se亚洲国产综合自在线| 成人黄页毛片网站| 国产一区二区三区免费播放| 久久99精品久久久久久国产越南| 日本网站在线观看一区二区三区| 亚洲第一激情av| 亚洲午夜久久久久久久久电影网| 亚洲精品五月天| 尤物视频一区二区| 亚洲日本在线天堂| 亚洲黄色尤物视频| 亚洲一区二区欧美日韩| 亚洲国产日韩精品| 亚洲在线一区二区三区| 亚洲一区二区三区激情| 亚洲成人免费视| 五月天丁香久久| 日韩在线一区二区三区| 青青草国产精品97视觉盛宴| 蜜臀av性久久久久蜜臀av麻豆 | 蜜桃精品在线观看| 久久机这里只有精品| 激情图区综合网| 国产麻豆午夜三级精品| 成人一道本在线| 99视频一区二区三区| 91视频.com| 欧美视频在线观看一区| 51精品久久久久久久蜜臀| 欧美一区二区三区四区高清| 日韩欧美一区二区在线视频| 久久日一线二线三线suv| 中文欧美字幕免费| 亚洲精品网站在线观看| 日韩电影一二三区| 国产精品白丝jk黑袜喷水| gogogo免费视频观看亚洲一| 在线精品视频免费播放| 欧美一卡二卡三卡四卡| 久久久久久久久久久电影| 亚洲视频一区二区在线| 无吗不卡中文字幕| 国产盗摄一区二区三区| 色综合视频在线观看| 在线91免费看| 欧美国产1区2区| 亚洲国产精品久久久久婷婷884| 麻豆视频一区二区| 成人免费黄色在线| 欧美巨大另类极品videosbest| 欧美xingq一区二区| 中文字幕视频一区二区三区久| 亚洲一区二区精品视频| 国产一区二区成人久久免费影院| 91啪亚洲精品| 精品久久一二三区| 亚洲欧美日韩成人高清在线一区| 日本欧美一区二区在线观看| 国产盗摄一区二区三区| 欧美裸体一区二区三区| 久久精品亚洲麻豆av一区二区 | 国产中文一区二区三区| 91社区在线播放| 精品国产精品网麻豆系列| 亚洲欧美日韩在线| 国产一区在线不卡| 欧美在线视频全部完| 国产亚洲午夜高清国产拍精品 | 国产精品白丝jk白祙喷水网站| 一道本成人在线| 久久久精品欧美丰满| 天堂va蜜桃一区二区三区 | 成人激情免费视频| 欧美电视剧在线观看完整版| 亚洲激情第一区| 国产最新精品精品你懂的| 欧洲av在线精品| 国产精品青草久久| 国内精品在线播放| 91精品国产高清一区二区三区蜜臀| 中文字幕亚洲成人| 国产成人午夜电影网| 欧美二区三区91| 国产精品福利电影一区二区三区四区| 久久99精品国产麻豆婷婷| 欧美视频中文字幕| 亚洲视频资源在线| 盗摄精品av一区二区三区| 日韩一区二区电影| 亚洲va韩国va欧美va| 色猫猫国产区一区二在线视频| 欧美精品一区二区三区视频| 青青青爽久久午夜综合久久午夜| 在线精品视频一区二区三四 | 国产日韩欧美精品一区| 精品亚洲免费视频| 91精品国产欧美一区二区18| 亚洲国产裸拍裸体视频在线观看乱了 | 亚洲素人一区二区| 国产69精品一区二区亚洲孕妇| 日韩一区二区中文字幕| 亚洲第一狼人社区| 欧美日韩一二三区| 午夜精品福利一区二区蜜股av| 色先锋资源久久综合| 亚洲色图欧美激情| 97精品电影院| 亚洲精品高清视频在线观看| 91视视频在线观看入口直接观看www | 国产福利视频一区二区三区| 26uuu久久天堂性欧美| 久久精品999| 精品第一国产综合精品aⅴ| 精品夜夜嗨av一区二区三区| 精品国产凹凸成av人网站| 国内精品在线播放| 国产欧美综合色| 高清国产一区二区| 亚洲欧洲精品一区二区三区| av电影在线观看完整版一区二区| 国产精品午夜久久| 91影院在线观看| 一区二区理论电影在线观看| 欧美午夜电影网| 婷婷国产v国产偷v亚洲高清| 欧美一区二区三区日韩视频| 青草av.久久免费一区| 欧美大片一区二区三区| 国产一区二区福利| 中文字幕一区二区三区蜜月 | 精品国产一区二区三区久久影院| 国产在线视频一区二区| 国产欧美精品一区二区色综合 | 日韩专区一卡二卡| 久久综合色婷婷| av一区二区三区四区| 亚洲图片另类小说| 欧美中文字幕一二三区视频| 日本不卡一区二区三区| 久久久亚洲精品石原莉奈| 成人av网站在线观看| 亚洲综合免费观看高清完整版| 欧美一区二区视频在线观看 | 精品人伦一区二区色婷婷| 国产精品亚洲人在线观看| 中文字幕五月欧美| 欧美猛男男办公室激情| 国产一区 二区 三区一级| 国产精品人人做人人爽人人添 | 国产欧美在线观看一区| 色av一区二区| 国内精品伊人久久久久影院对白| 国产精品久久久久久久久动漫| 欧美日韩精品一区二区三区四区| 久久99精品视频| 亚洲男人都懂的| 欧美一区二区黄| 91在线视频网址| 青青草一区二区三区| 国产精品不卡在线观看| 欧美一区在线视频| www.99精品| 麻豆久久一区二区| 一卡二卡三卡日韩欧美| 欧美不卡在线视频| 在线观看亚洲a| 国产91综合网| 日韩成人午夜电影| 亚洲美女少妇撒尿| 久久久久99精品国产片| 7777精品伊人久久久大香线蕉经典版下载 | 欧美老女人第四色| 成人免费精品视频| 国内精品自线一区二区三区视频| 亚洲国产综合视频在线观看| 国产精品伦理在线|