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

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

?? mt.cpp

?? 由7-zip提供的壓縮、解壓縮程序
?? CPP
字號:
// MT.cpp#include "StdAfx.h"#include "../../../../Common/Alloc.h"#include "MT.h"static const UInt32 kBlockSize = (1 << 14);static DWORD WINAPI MFThread(void *threadCoderInfo){  return ((CMatchFinderMT *)threadCoderInfo)->ThreadFunc();}CMatchFinderMT::CMatchFinderMT():  m_Buffer(0),  m_NeedStart(true){  m_BlockIndex = kNumMTBlocks - 1;  m_CS[m_BlockIndex].Enter();  if (!m_Thread.Create(MFThread, this))    throw 271826;}CMatchFinderMT::~CMatchFinderMT() {  m_Exit = true;  m_CS[m_BlockIndex].Leave();  m_CanChangeBufferPos.Set();  if (m_NeedStart)    m_MtCanStart.Set();  m_Thread.Wait();  FreeMem();}void CMatchFinderMT::FreeMem(){  ::MyFree(m_Buffer);  m_Buffer = 0;}STDMETHODIMP CMatchFinderMT::Create(UInt32 sizeHistory, UInt32 keepAddBufferBefore,     UInt32 matchMaxLen, UInt32 keepAddBufferAfter){   FreeMem();  m_MatchMaxLen = matchMaxLen;  if (kBlockSize <= matchMaxLen * 4)    return E_INVALIDARG;  UInt32 bufferSize = kBlockSize * kNumMTBlocks;  m_Buffer = (UInt32 *)::MyAlloc(bufferSize * sizeof(UInt32));  if (m_Buffer == 0)    return E_OUTOFMEMORY;  keepAddBufferBefore += bufferSize;  keepAddBufferAfter += (kBlockSize + 1);  return m_MatchFinder->Create(sizeHistory, keepAddBufferBefore, matchMaxLen, keepAddBufferAfter); }// UInt32 blockSizeMult = 800HRESULT CMatchFinderMT::SetMatchFinder(IMatchFinder *matchFinder){  m_MatchFinder = matchFinder;  return S_OK;}STDMETHODIMP CMatchFinderMT::SetStream(ISequentialInStream *s){   return m_MatchFinder->SetStream(s);}// Call it after ReleaseStream / SetStreamSTDMETHODIMP CMatchFinderMT::Init(){   m_NeedStart = true;  m_Pos = 0;  m_PosLimit = 0;  HRESULT result = m_MatchFinder->Init();  if (result == S_OK)    m_DataCurrentPos = m_MatchFinder->GetPointerToCurrentPos();  m_NumAvailableBytes = m_MatchFinder->GetNumAvailableBytes();  return result; }// ReleaseStream is required to finish multithreadingSTDMETHODIMP_(void) CMatchFinderMT::ReleaseStream(){   m_StopWriting = true;  m_CS[m_BlockIndex].Leave();  if (!m_NeedStart)  {    m_CanChangeBufferPos.Set();    m_MtWasStopped.Lock();    m_NeedStart = true;  }  m_MatchFinder->ReleaseStream();  m_BlockIndex = kNumMTBlocks - 1;  m_CS[m_BlockIndex].Enter();}STDMETHODIMP_(Byte) CMatchFinderMT::GetIndexByte(Int32 index){   return m_DataCurrentPos[index]; }STDMETHODIMP_(UInt32) CMatchFinderMT::GetMatchLen(Int32 index, UInt32 distance, UInt32 limit){   if ((Int32)(index + limit) > m_NumAvailableBytes)    limit = m_NumAvailableBytes - (index);  distance++;  const Byte *pby1 = m_DataCurrentPos + index;  const Byte *pby2 = pby1 - distance; // FIXED  UInt32 i;  for(i = 0; i < limit && pby1[i] == pby2[i]; i++); // FIXED  return i;}STDMETHODIMP_(const Byte *) CMatchFinderMT::GetPointerToCurrentPos(){  return m_DataCurrentPos;}STDMETHODIMP_(UInt32) CMatchFinderMT::GetNumAvailableBytes(){   return m_NumAvailableBytes;}  void CMatchFinderMT::GetNextBlock(){  if (m_NeedStart)  {    m_NeedStart = false;    for (UInt32 i = 0; i < kNumMTBlocks; i++)      m_StopReading[i] = false;    m_StopWriting = false;    m_Exit = false;    m_MtWasStarted.Reset();    m_MtWasStopped.Reset();    m_CanChangeBufferPos.Reset();    m_BufferPosWasChanged.Reset();    m_MtCanStart.Set();    m_MtWasStarted.Lock();    m_Result = S_OK;  }  while (true)  {    UInt32 nextIndex = (m_BlockIndex == kNumMTBlocks - 1) ? 0 : m_BlockIndex + 1;    m_CS[nextIndex].Enter();    if (!m_StopReading[nextIndex])    {      m_CS[m_BlockIndex].Leave();      m_BlockIndex = nextIndex;      break;    }    m_StopReading[nextIndex] = false;    m_CS[nextIndex].Leave();    m_CanChangeBufferPos.Set();    m_BufferPosWasChanged.Lock();    m_CS[nextIndex].Enter();    m_CS[m_BlockIndex].Leave();    m_BlockIndex = nextIndex;  }  m_Pos = m_BlockIndex * kBlockSize;  m_PosLimit = m_Buffer[m_Pos++];  m_NumAvailableBytes = m_Buffer[m_Pos++];  m_Result = m_Results[m_BlockIndex];}STDMETHODIMP CMatchFinderMT::GetMatches(UInt32 *distances){   if (m_Pos == m_PosLimit)    GetNextBlock();  if (m_Result != S_OK)    return m_Result;  m_NumAvailableBytes--;  m_DataCurrentPos++;  const UInt32 *buffer = m_Buffer + m_Pos;  UInt32 len = *buffer++;  *distances++ = len;  m_Pos += 1 + len;  for (UInt32 i = 0; i != len; i += 2)  {    distances[i] = buffer[i];    distances[i + 1] = buffer[i + 1];  }  return S_OK; }STDMETHODIMP CMatchFinderMT::Skip(UInt32 num){   do  {    if (m_Pos == m_PosLimit)      GetNextBlock();        if (m_Result != S_OK)      return m_Result;    m_NumAvailableBytes--;    m_DataCurrentPos++;        UInt32 len = m_Buffer[m_Pos++];    m_Pos += len;  }  while(--num != 0);  return S_OK; }STDMETHODIMP_(Int32) CMatchFinderMT::NeedChangeBufferPos(UInt32 numCheckBytes){  throw 1;}STDMETHODIMP_(void) CMatchFinderMT::ChangeBufferPos(){  throw 1;}DWORD CMatchFinderMT::ThreadFunc(){  while(true)  {    bool needStartEvent = true;    m_MtCanStart.Lock();    HRESULT result = S_OK;    UInt32 blockIndex = 0;    while (true)    {      m_CS[blockIndex].Enter();      if (needStartEvent)      {        m_MtWasStarted.Set();        needStartEvent = false;      }      else        m_CS[(blockIndex == 0) ? kNumMTBlocks - 1 : blockIndex - 1].Leave();      if (m_Exit)        return 0;      if (m_StopWriting)      {        m_MtWasStopped.Set();        m_CS[blockIndex].Leave();        break;      }      if (result == S_OK)      {        IMatchFinder *mf = m_MatchFinder;        if (mf->NeedChangeBufferPos(kBlockSize) != 0)        {          // m_AskChangeBufferPos.Set();          m_StopReading[blockIndex] = true;          m_CS[blockIndex].Leave();          m_CanChangeBufferPos.Lock();          m_CS[blockIndex].Enter();          const Byte *bufferPosBefore = mf->GetPointerToCurrentPos();          mf->ChangeBufferPos();          m_DataCurrentPos += mf->GetPointerToCurrentPos() - bufferPosBefore;          m_BufferPosWasChanged.Set();        }        else        {          UInt32 curPos = blockIndex * kBlockSize;          UInt32 limit = curPos + kBlockSize - m_MatchMaxLen - m_MatchMaxLen - 1;          UInt32 *buffer = m_Buffer;          m_Results[blockIndex] = S_OK;          curPos++;          UInt32 numAvailableBytes = mf->GetNumAvailableBytes();          buffer[curPos++] = numAvailableBytes;                    while (numAvailableBytes-- != 0 && curPos < limit)          {            result = mf->GetMatches(buffer + curPos);            if (result != S_OK)            {              m_Results[blockIndex] = result;              break;            }            curPos += buffer[curPos] + 1;          }          buffer[blockIndex * kBlockSize] = curPos;        }      }      else      {        UInt32 curPos = blockIndex * kBlockSize;        m_Buffer[curPos] = curPos + 2; // size of buffer        m_Buffer[curPos + 1] = 0;      // NumAvailableBytes        m_Results[blockIndex] = result; // error      }      if (++blockIndex == kNumMTBlocks)        blockIndex = 0;    }  }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
717成人午夜免费福利电影| 不卡一区在线观看| 日韩三级在线观看| 麻豆精品在线观看| 精品国产精品一区二区夜夜嗨| 裸体歌舞表演一区二区| 久久久精品国产免大香伊 | 欧美人与禽zozo性伦| 日韩二区在线观看| 国产喂奶挤奶一区二区三区| 97久久人人超碰| 天天色图综合网| 国产三级一区二区| 欧日韩精品视频| 国内精品嫩模私拍在线| 国产精品久久精品日日| 欧美久久久久久久久中文字幕| 国产中文一区二区三区| 樱桃国产成人精品视频| 制服.丝袜.亚洲.中文.综合| 国产精品18久久久久| 一区二区三区不卡视频| 久久综合av免费| 在线日韩国产精品| 国产精品99久久久| 亚洲国产精品精华液网站| 久久午夜老司机| 欧美日韩情趣电影| 成人免费观看av| 免费高清在线视频一区·| 中文字幕亚洲电影| 精品日韩一区二区三区| 欧美在线影院一区二区| 欧美精品一区二区三区在线播放| 久久久久国产一区二区三区四区| 中文字幕亚洲一区二区av在线| www.欧美色图| 精品国产第一区二区三区观看体验| 美腿丝袜在线亚洲一区| 亚洲乱码精品一二三四区日韩在线 | 欧美日韩久久久久久| 国产成人欧美日韩在线电影| 亚洲第一电影网| 国产精品福利av| 欧美va在线播放| 欧美区一区二区三区| 91丝袜高跟美女视频| 国产精品 欧美精品| 麻豆成人久久精品二区三区红 | 成人午夜视频免费看| 男人的天堂久久精品| 亚洲精品伦理在线| 中文在线一区二区| 久久久久久久久久久99999| 欧美一区二区三区成人| 欧美性色欧美a在线播放| 94-欧美-setu| 91老师片黄在线观看| 懂色一区二区三区免费观看| 国产一区二区调教| 久久爱另类一区二区小说| 日本伊人午夜精品| 奇米色一区二区| 亚洲成人免费看| 亚洲午夜成aⅴ人片| 亚洲最大的成人av| 一区二区成人在线| 亚洲影院免费观看| 亚洲一区二区三区影院| 亚洲一区二区三区国产| 亚洲午夜一区二区| 亚洲国产一区二区三区青草影视 | 日韩专区在线视频| 亚洲国产精品人人做人人爽| 亚洲欧美日韩中文播放| 亚洲欧美日韩电影| 亚洲一区二区在线播放相泽| 夜夜精品视频一区二区| 香蕉影视欧美成人| 日本在线播放一区二区三区| 蜜臀av一区二区在线观看| 美女一区二区三区| 国产福利一区在线| 豆国产96在线|亚洲| 色综合久久天天综合网| 欧美性xxxxx极品少妇| 7777精品伊人久久久大香线蕉超级流畅 | 亚洲综合色在线| 午夜欧美一区二区三区在线播放| 午夜免费久久看| 美女脱光内衣内裤视频久久网站 | 白白色 亚洲乱淫| 成人91在线观看| 色先锋资源久久综合| 欧美精品日韩综合在线| 精品日韩在线观看| 中文字幕在线不卡视频| 亚洲最大成人综合| 美腿丝袜在线亚洲一区| 粉嫩av一区二区三区粉嫩| 成人av电影在线| 欧美日韩精品欧美日韩精品| 日韩免费观看高清完整版| 久久精品男人天堂av| 曰韩精品一区二区| 日本在线不卡一区| 成人白浆超碰人人人人| 欧美日韩一区二区三区不卡| 2023国产精品自拍| 亚洲制服丝袜av| 久久爱www久久做| 91在线看国产| 日韩精品最新网址| 1区2区3区国产精品| 免费黄网站欧美| 一本到一区二区三区| 亚洲精品一区二区三区蜜桃下载| 亚洲区小说区图片区qvod| 黄色成人免费在线| 欧美三级日韩在线| 国产日本欧洲亚洲| 亚洲午夜激情av| 99re这里都是精品| 2023国产精品| 日韩主播视频在线| 99国产精品久久久久久久久久久| 日韩精品一区二区三区中文精品 | 免费人成精品欧美精品| 不卡的av电影| 欧美精品一区二区不卡| 亚洲超丰满肉感bbw| hitomi一区二区三区精品| 欧美大片在线观看一区二区| 亚洲黄色尤物视频| 成人v精品蜜桃久久一区| 久久亚洲一区二区三区四区| 亚洲第一福利一区| 色综合久久久久综合体| 欧美国产一区二区| 国产一区二区三区黄视频 | 日韩欧美一级特黄在线播放| 亚洲精品v日韩精品| 丁香婷婷综合激情五月色| 欧美一区二区三区白人| 亚洲va国产天堂va久久en| 一本大道综合伊人精品热热| 国产人妖乱国产精品人妖| 久草在线在线精品观看| 欧美一区2区视频在线观看| 亚洲国产色一区| 在线观看亚洲专区| 亚洲精品成人悠悠色影视| av网站免费线看精品| 国产精品久久久久影院老司| 国产成人午夜精品5599| 精品国产免费久久| 久久精品噜噜噜成人av农村| 91麻豆精品久久久久蜜臀| 午夜久久电影网| 欧美日韩一区二区电影| 亚洲综合成人在线| 欧美性大战久久久久久久蜜臀 | 亚洲精品午夜久久久| 9色porny自拍视频一区二区| 欧美激情资源网| 国产精品中文字幕日韩精品| 国产区在线观看成人精品| 成人小视频免费在线观看| 国产视频亚洲色图| 成人永久aaa| 国产日韩欧美亚洲| av电影在线观看完整版一区二区| 国产精品麻豆网站| 色综合天天综合| 国产在线精品一区二区不卡了| 粉嫩av一区二区三区在线播放| 欧美成人精品高清在线播放 | 捆绑调教一区二区三区| 欧美一区二区三区影视| 蜜臀精品久久久久久蜜臀| 精品国产免费久久| 高清shemale亚洲人妖| 一区在线观看免费| 在线亚洲免费视频| 首页综合国产亚洲丝袜| 欧美成人vps| 国产白丝精品91爽爽久久| 亚洲日本中文字幕区| 欧美日韩精品一区视频| 成人精品小蝌蚪| 亚洲综合激情另类小说区| 日韩午夜激情av| 国产精品亚洲午夜一区二区三区 | a级精品国产片在线观看| 一区二区三区四区精品在线视频| 欧美日韩亚洲另类| 毛片不卡一区二区| 国产传媒欧美日韩成人| 在线观看91av| 国产真实乱子伦精品视频|