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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? lzmaencoder.cpp

?? lzma 壓縮 4.06version
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
// LZMA/Encoder.cpp

#include "StdAfx.h"

#include "../../../Common/Defs.h"

#include "LZMAEncoder.h"

// for minimal compressing code size define these:
// #define COMPRESS_MF_BT
// #define COMPRESS_MF_BT4

#if !defined(COMPRESS_MF_BT) && !defined(COMPRESS_MF_PAT) && !defined(COMPRESS_MF_HC)
#define COMPRESS_MF_BT
#define COMPRESS_MF_PAT
#define COMPRESS_MF_HC
#endif

#ifdef COMPRESS_MF_BT
#if !defined(COMPRESS_MF_BT2) && !defined(COMPRESS_MF_BT3) && !defined(COMPRESS_MF_BT4) && !defined(COMPRESS_MF_BT4B)
#define COMPRESS_MF_BT2
#define COMPRESS_MF_BT3
#define COMPRESS_MF_BT4
#define COMPRESS_MF_BT4B
#endif
#ifdef COMPRESS_MF_BT2
#include "../LZ/BinTree/BinTree2.h"
#endif
#ifdef COMPRESS_MF_BT3
#include "../LZ/BinTree/BinTree3.h"
#endif
#ifdef COMPRESS_MF_BT4
#include "../LZ/BinTree/BinTree4.h"
#endif
#ifdef COMPRESS_MF_BT4B
#include "../LZ/BinTree/BinTree4b.h"
#endif
#endif

#ifdef COMPRESS_MF_PAT
#include "../LZ/Patricia/Pat2.h"
#include "../LZ/Patricia/Pat2H.h"
#include "../LZ/Patricia/Pat3H.h"
#include "../LZ/Patricia/Pat4H.h"
#include "../LZ/Patricia/Pat2R.h"
#endif

#ifdef COMPRESS_MF_HC
#include "../LZ/HashChain/HC3.h"
#include "../LZ/HashChain/HC4.h"
#endif

#ifdef COMPRESS_MF_MT
#include "../LZ/MT/MT.h"
#endif

namespace NCompress {
namespace NLZMA {

const int kDefaultDictionaryLogSize = 20;
const UInt32 kNumFastBytesDefault = 0x20;

enum 
{
  kBT2,
  kBT3,
  kBT4,
  kBT4B,
  kPat2,
  kPat2H,
  kPat3H,
  kPat4H,
  kPat2R,
  kHC3,
  kHC4
};

static const wchar_t *kMatchFinderIDs[] = 
{
  L"BT2",
  L"BT3",
  L"BT4",
  L"BT4B",
  L"PAT2",
  L"PAT2H",
  L"PAT3H",
  L"PAT4H",
  L"PAT2R",
  L"HC3",
  L"HC4"
};

Byte g_FastPos[1024];

class CFastPosInit
{
public:
  CFastPosInit() { Init(); }
  void Init()
  {
    const Byte kFastSlots = 20;
    int c = 2;
    g_FastPos[0] = 0;
    g_FastPos[1] = 1;

    for (Byte slotFast = 2; slotFast < kFastSlots; slotFast++)
    {
      UInt32 k = (1 << ((slotFast >> 1) - 1));
      for (UInt32 j = 0; j < k; j++, c++)
        g_FastPos[c] = slotFast;
    }
  }
} g_FastPosInit;


void CLiteralEncoder2::Encode(NRangeCoder::CEncoder *rangeEncoder, Byte symbol)
{
  UInt32 context = 1;
  for (int i = 7; i >= 0; i--)
  {
    UInt32 bit = (symbol >> i) & 1;
    UInt32 state = context;
    _encoders[state].Encode(rangeEncoder, bit);
    context = (context << 1) | bit;
  }
}

void CLiteralEncoder2::EncodeMatched(NRangeCoder::CEncoder *rangeEncoder, 
    Byte matchByte, Byte symbol)
{
  UInt32 context = 1;
  bool same = true;
  for (int i = 7; i >= 0; i--)
  {
    UInt32 bit = (symbol >> i) & 1;
    UInt32 state = context;
    if (same)
    {
      UInt32 matchBit = (matchByte >> i) & 1;
      state += (1 + matchBit) << 8;
      same = (matchBit == bit);
    }
    _encoders[state].Encode(rangeEncoder, bit);
    context = (context << 1) | bit;
  }
}

UInt32 CLiteralEncoder2::GetPrice(bool matchMode, Byte matchByte, Byte symbol) const
{
  UInt32 price = 0;
  UInt32 context = 1;
  int i = 7;
  if (matchMode)
  {
    for (; i >= 0; i--)
    {
      UInt32 matchBit = (matchByte >> i) & 1;
      UInt32 bit = (symbol >> i) & 1;
      price += _encoders[((1 + matchBit) << 8) + context].GetPrice(bit);
      context = (context << 1) | bit;
      if (matchBit != bit)
      {
        i--;
        break;
      }
    }
  }
  for (; i >= 0; i--)
  {
    UInt32 bit = (symbol >> i) & 1;
    price += _encoders[context].GetPrice(bit);
    context = (context << 1) | bit;
  }
  return price;
};


namespace NLength {

void CEncoder::Init(UInt32 numPosStates)
{
  _choice.Init();
  for (UInt32 posState = 0; posState < numPosStates; posState++)
  {
    _lowCoder[posState].Init();
    _midCoder[posState].Init();
  }
  _choice2.Init();
  _highCoder.Init();
}

void CEncoder::Encode(NRangeCoder::CEncoder *rangeEncoder, UInt32 symbol, UInt32 posState)
{
  if(symbol < kNumLowSymbols)
  {
    _choice.Encode(rangeEncoder, 0);
    _lowCoder[posState].Encode(rangeEncoder, symbol);
  }
  else
  {
    symbol -= kNumLowSymbols;
    _choice.Encode(rangeEncoder, 1);
    if(symbol < kNumMidSymbols)
    {
      _choice2.Encode(rangeEncoder, 0);
      _midCoder[posState].Encode(rangeEncoder, symbol);
    }
    else
    {
      _choice2.Encode(rangeEncoder, 1);
      _highCoder.Encode(rangeEncoder, symbol - kNumMidSymbols);
    }
  }
}

UInt32 CEncoder::GetPrice(UInt32 symbol, UInt32 posState) const
{
  UInt32 price = 0;
  if(symbol < kNumLowSymbols)
  {
    price += _choice.GetPrice(0);
    price += _lowCoder[posState].GetPrice(symbol);
  }
  else
  {
    symbol -= kNumLowSymbols;
    price += _choice.GetPrice(1);
    if(symbol < kNumMidSymbols)
    {
      price += _choice2.GetPrice(0);
      price += _midCoder[posState].GetPrice(symbol);
    }
    else
    {
      price += _choice2.GetPrice(1);
      price += _highCoder.GetPrice(symbol - kNumMidSymbols);
    }
  }
  return price;
}

}
CEncoder::CEncoder():
  _numFastBytes(kNumFastBytesDefault),
  _distTableSize(kDefaultDictionaryLogSize * 2),
  _posStateBits(2),
  _posStateMask(4 - 1),
  _numLiteralPosStateBits(0),
  _numLiteralContextBits(3),
  _dictionarySize(1 << kDefaultDictionaryLogSize),
  _dictionarySizePrev(UInt32(-1)),
  _numFastBytesPrev(UInt32(-1)),
  _matchFinderIndex(kBT4),
   #ifdef COMPRESS_MF_MT
  _multiThread(false),
   #endif
  _writeEndMark(false)
{
  _maxMode = false;
  _fastMode = false;
}

HRESULT CEncoder::Create()
{
  if (!_rangeEncoder.Create(1 << 20))
    return E_OUTOFMEMORY;
  if (!_matchFinder)
  {
    switch(_matchFinderIndex)
    {
      #ifdef COMPRESS_MF_BT
      #ifdef COMPRESS_MF_BT2
      case kBT2:
        _matchFinder = new NBT2::CMatchFinderBinTree;
        break;
      #endif
      #ifdef COMPRESS_MF_BT3
      case kBT3:
        _matchFinder = new NBT3::CMatchFinderBinTree;
        break;
      #endif
      #ifdef COMPRESS_MF_BT4
      case kBT4:
        _matchFinder = new NBT4::CMatchFinderBinTree;
        break;
      #endif
      #ifdef COMPRESS_MF_BT4B
      case kBT4B:
        _matchFinder = new NBT4B::CMatchFinderBinTree;
        break;
      #endif
      #endif
      
      #ifdef COMPRESS_MF_PAT
      case kPat2:
        _matchFinder = new NPat2::CPatricia;
        break;
      case kPat2H:
        _matchFinder = new NPat2H::CPatricia;
        break;
      case kPat3H:
        _matchFinder = new NPat3H::CPatricia;
        break;
      case kPat4H:
        _matchFinder = new NPat4H::CPatricia;
        break;
      case kPat2R:
        _matchFinder = new NPat2R::CPatricia;
        break;
      #endif

      #ifdef COMPRESS_MF_HC
      case kHC3:
        _matchFinder = new NHC3::CMatchFinderHC;
        break;
      case kHC4:
        _matchFinder = new NHC4::CMatchFinderHC;
        break;
      #endif
    }
    #ifdef COMPRESS_MF_MT
    if (_multiThread)
    {
      CMatchFinderMT *mfSpec = new CMatchFinderMT;
      CMyComPtr<IMatchFinder> mf = mfSpec;
      RINOK(mfSpec->SetMatchFinder(_matchFinder));
      _matchFinder.Release();
      _matchFinder = mf;
    }
    #endif
  }
  
  if (!_literalEncoder.Create(_numLiteralPosStateBits, _numLiteralContextBits))
    return E_OUTOFMEMORY;

  if (_dictionarySize == _dictionarySizePrev && _numFastBytesPrev == _numFastBytes)
    return S_OK;
  RINOK(_matchFinder->Create(_dictionarySize, kNumOpts, _numFastBytes, 
      kMatchMaxLen - _numFastBytes));
  _dictionarySizePrev = _dictionarySize;
  _numFastBytesPrev = _numFastBytes;
  return S_OK;
}

static bool AreStringsEqual(const wchar_t *base, const wchar_t *testString)
{
  while (true)
  {
    wchar_t c = *testString;
    if (c >= 'a' && c <= 'z')
      c -= 0x20;
    if (*base != c)
      return false;
    if (c == 0)
      return true;
    base++;
    testString++;
  }
}

static int FindMatchFinder(const wchar_t *s)
{
  for (int m = 0; m < (int)(sizeof(kMatchFinderIDs) / sizeof(kMatchFinderIDs[0])); m++)
    if (AreStringsEqual(kMatchFinderIDs[m], s))
      return m;
  return -1;
}

STDMETHODIMP CEncoder::SetCoderProperties(const PROPID *propIDs, 
    const PROPVARIANT *properties, UInt32 numProperties)
{
  for (UInt32 i = 0; i < numProperties; i++)
  {
    const PROPVARIANT &prop = properties[i];
    switch(propIDs[i])
    {
      case NCoderPropID::kNumFastBytes:
      {
        if (prop.vt != VT_UI4)
          return E_INVALIDARG;
        UInt32 numFastBytes = prop.ulVal;
        if(numFastBytes < 2 || numFastBytes > kMatchMaxLen)
          return E_INVALIDARG;
        _numFastBytes = numFastBytes;
        break;
      }
      case NCoderPropID::kAlgorithm:
      {
        if (prop.vt != VT_UI4)
          return E_INVALIDARG;
        UInt32 maximize = prop.ulVal;
        _fastMode = (maximize == 0); 
        _maxMode = (maximize >= 2);
        break;
      }
      case NCoderPropID::kMatchFinder:
      {
        if (prop.vt != VT_BSTR)
          return E_INVALIDARG;
        int matchFinderIndexPrev = _matchFinderIndex;
        int m = FindMatchFinder(prop.bstrVal);
        if (m < 0)
          return E_INVALIDARG;
        _matchFinderIndex = m;
        if (!_matchFinder && matchFinderIndexPrev != _matchFinderIndex)
        {
          _dictionarySizePrev = UInt32(-1);
          _matchFinder.Release();
        }
        break;
      }
      #ifdef COMPRESS_MF_MT
      case NCoderPropID::kMultiThread:
      {
        if (prop.vt != VT_BOOL)
          return E_INVALIDARG;
        bool newMultiThread = (prop.boolVal == VARIANT_TRUE);
        if (newMultiThread != _multiThread)
        {
          _dictionarySizePrev = UInt32(-1);
          _matchFinder.Release();
        }
        _multiThread = newMultiThread;
        break;
      }
      #endif
      case NCoderPropID::kDictionarySize:
      {
        const int kDicLogSizeMaxCompress = 28;
        if (prop.vt != VT_UI4)
          return E_INVALIDARG;
        UInt32 dictionarySize = prop.ulVal;
        if (dictionarySize < UInt32(1 << kDicLogSizeMin) ||
            dictionarySize > UInt32(1 << kDicLogSizeMaxCompress))
          return E_INVALIDARG;
        _dictionarySize = dictionarySize;
        UInt32 dicLogSize;
        for(dicLogSize = 0; dicLogSize < (UInt32)kDicLogSizeMaxCompress; dicLogSize++)
          if (dictionarySize <= (UInt32(1) << dicLogSize))
            break;
        _distTableSize = dicLogSize * 2;
        break;
      }
      case NCoderPropID::kPosStateBits:
      {
        if (prop.vt != VT_UI4)
          return E_INVALIDARG;
        UInt32 value = prop.ulVal;
        if (value > (UInt32)NLength::kNumPosStatesBitsEncodingMax)
          return E_INVALIDARG;
        _posStateBits = value;
        _posStateMask = (1 << _posStateBits) - 1;
        break;
      }
      case NCoderPropID::kLitPosBits:
      {
        if (prop.vt != VT_UI4)
          return E_INVALIDARG;
        UInt32 value = prop.ulVal;
        if (value > (UInt32)kNumLitPosStatesBitsEncodingMax)
          return E_INVALIDARG;
        _numLiteralPosStateBits = value;
        break;
      }
      case NCoderPropID::kLitContextBits:
      {
        if (prop.vt != VT_UI4)
          return E_INVALIDARG;
        UInt32 value = prop.ulVal;
        if (value > (UInt32)kNumLitContextBitsMax)
          return E_INVALIDARG;
        _numLiteralContextBits = value;
        break;
      }
      case NCoderPropID::kEndMarker:
      {
        if (prop.vt != VT_BOOL)
          return E_INVALIDARG;
        SetWriteEndMarkerMode(prop.boolVal == VARIANT_TRUE);
        break;
      }
      default:
        return E_INVALIDARG;
    }
  }
  return S_OK;
}

STDMETHODIMP CEncoder::WriteCoderProperties(ISequentialOutStream *outStream)
{ 
  Byte firstByte = (_posStateBits * 5 + _numLiteralPosStateBits) * 9 + _numLiteralContextBits;
  RINOK(outStream->Write(&firstByte, sizeof(firstByte), NULL));
  for (int i = 0; i < 4; i++)
  {
    Byte b = Byte(_dictionarySize >> (8 * i));
    RINOK(outStream->Write(&b, sizeof(b), NULL));
  }
  return S_OK;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产日本欧洲亚洲| 一本久久综合亚洲鲁鲁五月天| 国产精品一区二区你懂的| 国产激情91久久精品导航| www.久久精品| 欧美日韩三级视频| 欧美精品一区二区在线观看| 国产精品三级视频| 亚洲无线码一区二区三区| 蜜臀av性久久久久蜜臀aⅴ流畅| 国产成人免费在线视频| 在线免费观看日本欧美| 日韩免费视频线观看| 国产精品久久久久精k8| 天天色天天爱天天射综合| 丰满少妇在线播放bd日韩电影| 欧美色综合网站| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 99re热视频精品| 午夜欧美大尺度福利影院在线看| 蜜桃视频在线一区| 99精品热视频| 精品剧情v国产在线观看在线| 中文字幕一区二区三区四区| 免费在线观看一区二区三区| www.色综合.com| 日韩亚洲国产中文字幕欧美| 亚洲色图在线看| 精品一区二区免费| 在线观看一区日韩| 国产欧美日韩精品一区| 亚瑟在线精品视频| av一区二区三区在线| 26uuu精品一区二区在线观看| 一区二区国产视频| 成人动漫一区二区在线| 日韩精品一区二区三区视频播放| 亚洲精品v日韩精品| 国产成人综合亚洲91猫咪| 91精品国产综合久久久久久| 亚洲欧美电影一区二区| 国产福利精品一区二区| 91精品一区二区三区久久久久久 | 91色在线porny| 久久一夜天堂av一区二区三区 | 6080国产精品一区二区| 亚洲美女精品一区| 春色校园综合激情亚洲| 精品99久久久久久| 日本不卡高清视频| 欧美日韩高清一区二区| 亚洲欧美另类图片小说| 不卡av在线免费观看| 久久嫩草精品久久久精品一| 蜜臀a∨国产成人精品| 欧美日韩一级片网站| 一区二区三区免费看视频| 99在线热播精品免费| 国产精品麻豆视频| 成人app网站| 欧美极品美女视频| 国产成人免费在线视频| 欧美激情在线观看视频免费| 国产一区二区三区在线观看免费 | 国内精品写真在线观看| 日韩欧美一区中文| 日本不卡一二三| 日韩欧美黄色影院| 另类欧美日韩国产在线| 日韩免费看的电影| 另类欧美日韩国产在线| 欧美va亚洲va在线观看蝴蝶网| 蜜桃av一区二区| 精品奇米国产一区二区三区| 精品一区二区三区免费播放| 精品国产百合女同互慰| 激情久久五月天| 久久精品夜色噜噜亚洲aⅴ| 国产精品影视在线| 亚洲国产精品国自产拍av| 成人精品免费看| 成人免费在线观看入口| 色94色欧美sute亚洲线路二 | 欧美日韩国产天堂| 日韩中文字幕一区二区三区| 欧美精品久久久久久久多人混战 | 久久综合久久鬼色| 国产精品一区二区果冻传媒| 国产日韩欧美精品在线| 成人av在线网| 亚洲精品成人悠悠色影视| 欧美视频一区二区三区四区 | 337p粉嫩大胆色噜噜噜噜亚洲 | 亚洲欧美另类久久久精品2019| 一本大道综合伊人精品热热| 亚洲午夜免费视频| 日韩视频在线你懂得| 国产一区二区三区在线观看免费 | 91在线观看视频| 夜夜操天天操亚洲| 日韩一区二区精品在线观看| 国产一区二区三区黄视频| 中文字幕一区不卡| 欧美日韩不卡一区| 国产一区二区免费视频| 亚洲天堂免费看| 欧美丰满高潮xxxx喷水动漫| 国产在线播放一区| 亚洲欧美二区三区| 日韩精品中文字幕在线不卡尤物| 国产aⅴ综合色| 亚洲一级二级三级| 欧美成人乱码一区二区三区| 不卡高清视频专区| 蜜桃av一区二区在线观看| 国产精品盗摄一区二区三区| 精品视频色一区| 国产精品综合二区| 亚洲国产aⅴ天堂久久| 久久亚洲精品国产精品紫薇| 在线观看一区不卡| 国产在线精品一区二区三区不卡| 亚洲青青青在线视频| 欧美第一区第二区| 91麻豆123| 国精品**一区二区三区在线蜜桃| 亚洲伦理在线免费看| 精品国产乱码久久久久久夜甘婷婷| 99视频一区二区| 玖玖九九国产精品| 一区二区欧美在线观看| 欧美精品一区二区三区一线天视频| 色94色欧美sute亚洲13| 国产一区高清在线| 午夜精品久久久久| 国产精品久久久久久久午夜片 | 国内精品在线播放| 亚洲综合免费观看高清在线观看| 久久亚洲欧美国产精品乐播| 欧美人与禽zozo性伦| 99久久精品免费观看| 久久国产尿小便嘘嘘尿| 亚洲成人tv网| 亚洲日本丝袜连裤袜办公室| 久久久精品2019中文字幕之3| 3d成人动漫网站| 色综合天天狠狠| 国产成人免费网站| 久久精品国产成人一区二区三区| 亚洲精品国产成人久久av盗摄| 国产午夜精品一区二区三区四区| 91精品欧美一区二区三区综合在| 91麻豆精品在线观看| 大桥未久av一区二区三区中文| 另类中文字幕网| 日本欧美大码aⅴ在线播放| 一区二区三区四区不卡视频| 国产精品久久久久久久久免费樱桃| 欧美tk—视频vk| 这里是久久伊人| 欧美日韩国产中文| 欧美亚洲综合在线| 色成人在线视频| 91美女在线看| 97久久精品人人做人人爽| 国产91色综合久久免费分享| 国产在线精品一区二区| 久久国产精品露脸对白| 美女高潮久久久| 蜜桃视频在线观看一区二区| 日韩va欧美va亚洲va久久| 亚洲成人av电影在线| 一区二区三区毛片| 亚洲激情五月婷婷| 一区二区三区在线免费播放| 亚洲天堂成人在线观看| 成人免费视频在线观看| 18涩涩午夜精品.www| 中文字幕五月欧美| 亚洲欧洲精品一区二区三区| 国产精品国产三级国产aⅴ中文| 欧美经典三级视频一区二区三区| 国产婷婷色一区二区三区四区| 国产三级精品在线| 欧美国产视频在线| 国产精品女同一区二区三区| 国产精品色在线观看| 亚洲私人黄色宅男| 亚洲激情校园春色| 香蕉久久夜色精品国产使用方法 | 久久久久国产免费免费| 久久久91精品国产一区二区三区| 久久理论电影网| 国产精品视频免费看| 最新中文字幕一区二区三区| 亚洲欧美视频在线观看| 一区二区三区四区蜜桃| 日韩和欧美一区二区| 久久精品国产精品亚洲红杏 | 综合精品久久久|