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

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

?? x86_2.cpp

?? lzma 壓縮 4.06version
?? CPP
字號:
// x86_2.cpp

#include "StdAfx.h"
#include "x86_2.h"

#include "../../../Common/Alloc.h"

static const int kBufferSize = 1 << 17;

inline UInt32 Swap4(UInt32 value)
{
  return (value << 24) | (value >> 24) | 
    ( (value >> 8) & 0xFF00) | ( (value << 8) & 0xFF0000);
}

inline bool IsJcc(Byte b0, Byte b1)
{
  return (b0 == 0x0F && (b1 & 0xF0) == 0x80);
}

#ifndef EXTRACT_ONLY

static bool inline Test86MSByte(Byte b)
{
  return (b == 0 || b == 0xFF);
}

bool CBCJ2_x86_Encoder::Create()
{
  if (!_mainStream.Create(1 << 16))
    return false;
  if (!_callStream.Create(1 << 20))
    return false;
  if (!_jumpStream.Create(1 << 20))
    return false;
  if (!_rangeEncoder.Create(1 << 20))
    return false;
  if (_buffer == 0)
  {
    _buffer = (Byte *)BigAlloc(kBufferSize);
    if (_buffer == 0)
      return false;
  }
  return true;
}

CBCJ2_x86_Encoder::~CBCJ2_x86_Encoder()
{
  BigFree(_buffer);
}

HRESULT CBCJ2_x86_Encoder::Flush()
{
  RINOK(_mainStream.Flush());
  RINOK(_callStream.Flush());
  RINOK(_jumpStream.Flush());
  _rangeEncoder.FlushData();
  return _rangeEncoder.FlushStream();
}

const UInt32 kDefaultLimit = (1 << 24);

HRESULT CBCJ2_x86_Encoder::CodeReal(ISequentialInStream **inStreams,
      const UInt64 **inSizes,
      UInt32 numInStreams,
      ISequentialOutStream **outStreams,
      const UInt64 **outSizes,
      UInt32 numOutStreams,
      ICompressProgressInfo *progress)
{
  if (numInStreams != 1 || numOutStreams != 4)
    return E_INVALIDARG;

  if (!Create())
    return E_OUTOFMEMORY;

  bool sizeIsDefined = false;
  UInt64 inSize;
  if (inSizes != NULL)
    if (inSizes[0] != NULL)
    {
      inSize = *inSizes[0];
      if (inSize <= kDefaultLimit)
        sizeIsDefined = true;
    }

  ISequentialInStream *inStream = inStreams[0];

  _mainStream.SetStream(outStreams[0]);
  _mainStream.Init();
  _callStream.SetStream(outStreams[1]);
  _callStream.Init();
  _jumpStream.SetStream(outStreams[2]);
  _jumpStream.Init();
  _rangeEncoder.SetStream(outStreams[3]);
  _rangeEncoder.Init();
  for (int i = 0; i < 256; i++)
    _statusE8Encoder[i].Init();
  _statusE9Encoder.Init();
  _statusJccEncoder.Init();
  CCoderReleaser releaser(this);

  CMyComPtr<ICompressGetSubStreamSize> getSubStreamSize;
  {
    inStream->QueryInterface(IID_ICompressGetSubStreamSize, (void **)&getSubStreamSize);
  }

  UInt32 nowPos = 0;
  UInt64 nowPos64 = 0;
  UInt32 bufferPos = 0;
  UInt32 processedSize;

  Byte prevByte = 0;

  UInt64 subStreamIndex = 0;
  UInt64 subStreamStartPos  = 0;
  UInt64 subStreamEndPos = 0;

  while(true)
  {
    UInt32 size = kBufferSize - bufferPos;
    RINOK(inStream->Read(_buffer + bufferPos, size, &processedSize));
    UInt32 endPos = bufferPos + processedSize;
    
    if (endPos < 5)
    {
      // change it 
      for (bufferPos = 0; bufferPos < endPos; bufferPos++)
      {
        Byte b = _buffer[bufferPos];
        _mainStream.WriteByte(b);
        if (b == 0xE8)
          _statusE8Encoder[prevByte].Encode(&_rangeEncoder, 0);
        else if (b == 0xE9)
          _statusE9Encoder.Encode(&_rangeEncoder, 0);
        else if (IsJcc(prevByte, b))
          _statusJccEncoder.Encode(&_rangeEncoder, 0);
        prevByte = b;
      }
      return Flush();
    }

    bufferPos = 0;

    UInt32 limit = endPos - 5;
    while(bufferPos <= limit)
    {
      Byte b = _buffer[bufferPos];
      _mainStream.WriteByte(b);
      if (b != 0xE8 && b != 0xE9 && !IsJcc(prevByte, b))
      {
        bufferPos++;
        prevByte = b;
        continue;
      }
      Byte nextByte = _buffer[bufferPos + 4];
      UInt32 src = 
        (UInt32(nextByte) << 24) |
        (UInt32(_buffer[bufferPos + 3]) << 16) |
        (UInt32(_buffer[bufferPos + 2]) << 8) |
        (_buffer[bufferPos + 1]);
      UInt32 dest = (nowPos + bufferPos + 5) + src;
      // if (Test86MSByte(nextByte))
      bool convert;
      if (getSubStreamSize != NULL)
      {
        UInt64 currentPos = (nowPos64 + bufferPos);
        while (subStreamEndPos < currentPos)
        {
          UInt64 subStreamSize;
          HRESULT result = getSubStreamSize->GetSubStreamSize(subStreamIndex, &subStreamSize);
          if (result == S_OK)
          {
            subStreamStartPos = subStreamEndPos;
            subStreamEndPos += subStreamSize;          
            subStreamIndex++;
          }
          else if (result == S_FALSE || result == E_NOTIMPL)
          {
            getSubStreamSize.Release();
            subStreamStartPos = 0;
            subStreamEndPos = subStreamStartPos - 1;          
          }
          else
            return result;
        }
        if (getSubStreamSize == NULL)
        {
          if (sizeIsDefined)
            convert = (dest < inSize);
          else
            convert = Test86MSByte(nextByte);
        }
        else if (subStreamEndPos - subStreamStartPos > kDefaultLimit)
          convert = Test86MSByte(nextByte);
        else
        {
          UInt64 dest64 = (currentPos + 5) + Int64(Int32(src));
          convert = (dest64 >= subStreamStartPos && dest64 < subStreamEndPos);
        }
      }
      else if (sizeIsDefined)
        convert = (dest < inSize);
      else
        convert = Test86MSByte(nextByte);
      if (convert)
      {
        if (b == 0xE8)
          _statusE8Encoder[prevByte].Encode(&_rangeEncoder, 1);
        else if (b == 0xE9)
          _statusE9Encoder.Encode(&_rangeEncoder, 1);
        else 
          _statusJccEncoder.Encode(&_rangeEncoder, 1);

        dest = Swap4(dest);

        bufferPos += 5;
        if (b == 0xE8)
          _callStream.WriteBytes(&dest, sizeof(dest));
        else 
          _jumpStream.WriteBytes(&dest, sizeof(dest));
        prevByte = nextByte;
      }
      else
      {
        if (b == 0xE8)
          _statusE8Encoder[prevByte].Encode(&_rangeEncoder, 0);
        else if (b == 0xE9)
          _statusE9Encoder.Encode(&_rangeEncoder, 0);
        else
          _statusJccEncoder.Encode(&_rangeEncoder, 0);
        bufferPos++;
        prevByte = b;
      }
    }
    nowPos += bufferPos;
    nowPos64 += bufferPos;

    if (progress != NULL)
    {
      RINOK(progress->SetRatioInfo(&nowPos64, NULL));
    }
 
    UInt32 i = 0;
    while(bufferPos < endPos)
      _buffer[i++] = _buffer[bufferPos++];
    bufferPos = i;
  }
}

STDMETHODIMP CBCJ2_x86_Encoder::Code(ISequentialInStream **inStreams,
      const UInt64 **inSizes,
      UInt32 numInStreams,
      ISequentialOutStream **outStreams,
      const UInt64 **outSizes,
      UInt32 numOutStreams,
      ICompressProgressInfo *progress)
{
  try
  {
    return CodeReal(inStreams, inSizes, numInStreams,
      outStreams, outSizes,numOutStreams, progress);
  }
  catch(const COutBufferException &e) { return e.ErrorCode; }
  catch(...) { return S_FALSE; }
}

#endif

HRESULT CBCJ2_x86_Decoder::CodeReal(ISequentialInStream **inStreams,
      const UInt64 **inSizes,
      UInt32 numInStreams,
      ISequentialOutStream **outStreams,
      const UInt64 **outSizes,
      UInt32 numOutStreams,
      ICompressProgressInfo *progress)
{
  if (numInStreams != 4 || numOutStreams != 1)
    return E_INVALIDARG;

  if (!_mainInStream.Create(1 << 16))
    return E_OUTOFMEMORY;
  if (!_callStream.Create(1 << 20))
    return E_OUTOFMEMORY;
  if (!_jumpStream.Create(1 << 16))
    return E_OUTOFMEMORY;
  if (!_rangeDecoder.Create(1 << 20))
    return E_OUTOFMEMORY;
  if (!_outStream.Create(1 << 16))
    return E_OUTOFMEMORY;

  _mainInStream.SetStream(inStreams[0]);
  _callStream.SetStream(inStreams[1]);
  _jumpStream.SetStream(inStreams[2]);
  _rangeDecoder.SetStream(inStreams[3]);
  _outStream.SetStream(outStreams[0]);

  _mainInStream.Init();
  _callStream.Init();
  _jumpStream.Init();
  _rangeDecoder.Init();
  _outStream.Init();

  for (int i = 0; i < 256; i++)
    _statusE8Decoder[i].Init();
  _statusE9Decoder.Init();
  _statusJccDecoder.Init();

  CCoderReleaser releaser(this);

  Byte prevByte = 0;
  UInt32 processedBytes = 0;
  while(true)
  {
    if (processedBytes > (1 << 20) && progress != NULL)
    {
      UInt64 nowPos64 = _outStream.GetProcessedSize();
      RINOK(progress->SetRatioInfo(NULL, &nowPos64));
      processedBytes = 0;
    }
    processedBytes++;
    Byte b;
    if (!_mainInStream.ReadByte(b))
      return Flush();
    _outStream.WriteByte(b);
    if (b != 0xE8 && b != 0xE9 && !IsJcc(prevByte, b))
    {
      prevByte = b;
      continue;
    }
    bool status;
    if (b == 0xE8)
      status = (_statusE8Decoder[prevByte].Decode(&_rangeDecoder) == 1);
    else if (b == 0xE9)
      status = (_statusE9Decoder.Decode(&_rangeDecoder) == 1);
    else
      status = (_statusJccDecoder.Decode(&_rangeDecoder) == 1);
    if (status)
    {
      UInt32 src;
      if (b == 0xE8)
      {
        if (!_callStream.ReadBytes(&src, sizeof(src)))
          return S_FALSE;
      }
      else
      {
        if (!_jumpStream.ReadBytes(&src, sizeof(src)))
          return S_FALSE;
      }
      src = Swap4(src);
      UInt32 dest = src - (UInt32(_outStream.GetProcessedSize()) + 4) ;
      _outStream.WriteBytes(&dest, sizeof(dest));
      prevByte = (dest >> 24);
      processedBytes += 4;
    }
    else
      prevByte = b;
  }
}

STDMETHODIMP CBCJ2_x86_Decoder::Code(ISequentialInStream **inStreams,
      const UInt64 **inSizes,
      UInt32 numInStreams,
      ISequentialOutStream **outStreams,
      const UInt64 **outSizes,
      UInt32 numOutStreams,
      ICompressProgressInfo *progress)
{
  try
  {
    return CodeReal(inStreams, inSizes, numInStreams,
        outStreams, outSizes,numOutStreams, progress);
  }
  catch(const COutBufferException &e) { return e.ErrorCode; }
  catch(...) { return S_FALSE; }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品一区蜜桃臀影院| 国产成人综合视频| 亚洲综合在线视频| 中文字幕综合网| 国产精品福利影院| 最新高清无码专区| 亚洲码国产岛国毛片在线| 亚洲欧洲精品一区二区三区| 欧美国产视频在线| 国产精品人人做人人爽人人添| 国产精品情趣视频| 亚洲色图欧洲色图婷婷| 亚洲激情图片qvod| 午夜国产精品一区| 久久aⅴ国产欧美74aaa| 蜜臀久久久久久久| 国产一区二区免费看| 成人免费精品视频| 色哟哟亚洲精品| 欧美精品久久一区| 久久久精品一品道一区| 国产精品日日摸夜夜摸av| 亚洲男人天堂一区| 午夜不卡在线视频| 国产一区二区主播在线| bt欧美亚洲午夜电影天堂| 在线观看区一区二| 欧美一级国产精品| 国产女主播一区| 夜夜嗨av一区二区三区中文字幕| 婷婷久久综合九色综合伊人色| 美女视频黄免费的久久| 成人免费av在线| 欧美日韩在线免费视频| 精品伦理精品一区| 亚洲人成网站色在线观看| 污片在线观看一区二区| 国产成人综合在线观看| 91麻豆精品在线观看| 日韩一区二区三区电影| 国产欧美日韩在线| 亚洲国产视频网站| 国产乱子伦一区二区三区国色天香| 97精品国产97久久久久久久久久久久| 欧美日韩视频第一区| 久久久久久亚洲综合影院红桃 | 久久久久久久久久久久久女国产乱 | 色噜噜久久综合| 日韩一级二级三级| 成人免费在线播放视频| 日本最新不卡在线| 成人av网址在线| 欧美一三区三区四区免费在线看 | 日一区二区三区| 国产成人8x视频一区二区| 在线视频一区二区三| 国产亚洲婷婷免费| 五月天网站亚洲| 99国产精品一区| 精品av综合导航| 一区二区三区四区激情| 国产一区二区精品久久91| 欧美吻胸吃奶大尺度电影| 国产欧美一区二区精品性色超碰| 午夜视黄欧洲亚洲| 91丨porny丨最新| 久久精品人人做| 色综合亚洲欧洲| 成人精品在线视频观看| 欧美精品三级日韩久久| 国产精品毛片无遮挡高清| 蜜桃免费网站一区二区三区| 91九色最新地址| 国产三级精品视频| 加勒比av一区二区| 欧美日本一道本| 亚洲免费视频成人| thepron国产精品| 久久久久久久久久久电影| 日韩1区2区3区| 欧美日韩免费一区二区三区 | 五月激情六月综合| 欧洲另类一二三四区| 亚洲三级视频在线观看| 国产露脸91国语对白| 日韩天堂在线观看| 日韩高清不卡一区二区| 欧美日本一区二区三区| 亚洲综合激情另类小说区| 99久久99久久精品免费观看 | 亚洲成人黄色影院| 欧美性做爰猛烈叫床潮| 夜夜嗨av一区二区三区网页| 91片在线免费观看| 亚洲精品日韩综合观看成人91| av在线一区二区三区| 国产精品素人一区二区| 国产v综合v亚洲欧| 国产三级精品在线| 从欧美一区二区三区| 欧美国产视频在线| 99这里只有久久精品视频| 欧美激情一区二区三区在线| 国产精品一级片在线观看| 久久久久久久网| 懂色av一区二区夜夜嗨| 中文欧美字幕免费| aaa亚洲精品| 一区二区高清在线| 欧美日韩精品免费| 日韩高清不卡一区二区三区| 欧美一区二区观看视频| 久久成人综合网| 久久久激情视频| 成人免费视频一区| 亚洲精品欧美在线| 欧美日韩激情在线| 蜜臀va亚洲va欧美va天堂| 久久综合九色欧美综合狠狠| 国产米奇在线777精品观看| 日本一区二区三区视频视频| 成人性色生活片免费看爆迷你毛片| 国产精品久久久久三级| 91蜜桃传媒精品久久久一区二区| 一区二区三区国产精品| 91精品国产综合久久蜜臀| 国产在线观看一区二区| 国产精品久久福利| 一本色道久久综合精品竹菊| 天天综合日日夜夜精品| 久久只精品国产| av电影在线不卡| 午夜精品在线视频一区| 久久影院视频免费| 91碰在线视频| 久久不见久久见免费视频1| 日本一区二区三区高清不卡| 欧洲生活片亚洲生活在线观看| 麻豆成人免费电影| 亚洲欧美电影院| 欧美一区二区日韩| 成人av电影在线播放| 亚洲大片精品永久免费| 久久久综合精品| 欧美视频你懂的| 国产精品一区二区久久不卡| 一区二区三区欧美日| 精品免费一区二区三区| 色婷婷av一区二区三区软件| 久久精品国产**网站演员| 成人免费小视频| 日韩一区二区免费在线观看| aa级大片欧美| 黑人巨大精品欧美一区| 亚洲午夜精品在线| 国产香蕉久久精品综合网| 日本精品裸体写真集在线观看| 久久99久国产精品黄毛片色诱| ...中文天堂在线一区| 日韩美女天天操| 在线视频欧美区| 国产成a人无v码亚洲福利| 日韩av在线播放中文字幕| 中文字幕不卡一区| 欧美一级高清大全免费观看| 91丨porny丨国产入口| 国产在线精品免费| 日本午夜精品视频在线观看 | 免费亚洲电影在线| 亚洲男同性恋视频| 久久精品无码一区二区三区| 欧美精品久久久久久久多人混战| 97国产精品videossex| 国产精品白丝jk白祙喷水网站| 日本一不卡视频| 亚洲一区二区三区国产| 国产精品情趣视频| www欧美成人18+| 日韩视频在线你懂得| 欧美在线视频日韩| 99久久久精品免费观看国产蜜| 国产一区二区精品久久91| 奇米色一区二区三区四区| 亚洲成人黄色影院| 亚洲一区二三区| 国产精品视频一区二区三区不卡| 精品国产一区久久| 9191成人精品久久| 精品视频在线视频| 91成人国产精品| 91久久精品一区二区| 99热99精品| 99re亚洲国产精品| 成人av电影免费观看| 国产成a人无v码亚洲福利| 国产成人在线影院 | 欧美乱妇15p| 欧美日韩高清不卡| 欧美二区三区的天堂| 精品视频在线免费看|