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

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

?? lzh.pas

?? themeengine6源碼
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
  i, j: SmallInt;
begin
  //Initialize frquency tree
  for i := 0 to PRED(cNumChars) do begin
    freq[i] := 1;
    Child[i] := i + cTableSize;
    Parent[i + cTableSize] := i;
  end;

  i := 0;
  j := cNumChars;
  while (j <= cRootPos) do begin
    freq[j] := freq[i] + freq[i + 1];
    Child[j] := i;
    Parent[i] := j;
    Parent[i + 1] := j;
    inc(i,2);
    inc(j);
  end;

  freq[cTableSize] := $ffff;
  Parent[cRootPos] := 0;
end;

procedure TLZHStream.Reconstruct;
VAR
 i, j, k, tmp: SmallInt;
 f, l: Word;
begin
  //Half the existing values
  j := 0;
  for i := 0 to PRED(cTableSize) do begin
    if (Child[i] >= cTableSize) then begin
      freq[j] := SUCC(freq[i]) div 2;    {@@ Bug Fix MOD -> DIV @@}
      Child[j] := Child[i];
      inc(j);
    end;
  end;

  //Make a tree : first, connect children nodes
  i := 0;
  j := cNumChars;
  while (j < cTableSize) do begin
    k := SUCC(i);
    f := freq[i] + freq[k];
    freq[j] := f;
    k := PRED(j);

    while f < freq[k] do dec(K);

    inc(k);
    l := (j - k) SHL 1;
    tmp := SUCC(k);
    move(freq[k], freq[tmp], l);
    freq[k] := f;
    move(Child[k], Child[tmp], l);
    Child[k] := i;
    inc(i,2);
    inc(j);
  end;

  //Connect parent nodes
  for i := 0 to PRED(cTableSize) do begin
    k := Child[i];
    if (k >= cTableSize) then
	    Parent[k] := i
    else begin
	    Parent[k] := i;
      Parent[SUCC(k)] := i;
	  end;
  end;
end;


procedure TLZHStream.update(c : SmallInt);
var
  i, j, k, l: SmallInt;
begin
  if (freq[cRootPos] = cMaximumFreq) then Reconstruct;

  c := Parent[c + cTableSize];
  repeat
   inc(freq[c]);
   k := freq[c];

	 //Wwap nodes to keep the tree freq-ordered
   l := SUCC(C);
   if (k > freq[l]) then begin
     while (k > freq[l]) do inc(l);

     dec(l);
     freq[c] := freq[l];
     freq[l] := k;

     i := Child[c];
     Parent[i] := l;
     if (i < cTableSize) then Parent[SUCC(i)] := l;

     j := Child[l];
     Child[l] := i;

     Parent[j] := c;
     if (j < cTableSize) then Parent[SUCC(j)] := c;
     Child[c] := j;

     c := l;
   end;
   c := Parent[c];
 until (c = 0); //Repeat until root has been reached
end;


procedure TLZHStream.EncodeChar(c: WORD);
var
  i: Word;
  j, k: SmallInt;
begin
  i := 0;
  j := 0;
  k := Parent[c + cTableSize];

	//Search connections from leaf node to the root
  repeat
    i := i SHR 1;
    //IF node's address is odd, output 1, otherwise 0

    if boolean(k AND 1) then inc(i,$8000);
    inc(j);
    k := Parent[k];
  until (k = cRootPos);

  Putcode(j, i);
  code := i;
  len := j;
  update(c);
end;



procedure TLZHStream.EncodePosition(c : WORD);
var
  i,j: WORD;
begin
	//Output upper 6 bits with encoding
  i := c SHR 6;
  j := cEncTableCode[i];
  Putcode(cEncTableLen[i],j SHL 8);

	//Output lower 6 bits directly
  Putcode(6, (c AND $3f) SHL 10);
end;

procedure TLZHStream.EncodeEnd;
var
  Temp: byte;
  Got: Word;
begin
  if boolean(putlen) then begin
    Temp := Lo(putbuf SHR 8);
    InternalWrite(Temp,1,Got);
    inc(codesize);
  end;
end;

function TLZHStream.DecodeChar: SmallInt;
var
  c: WORD;
begin
  c := Child[cRootPos];
  //Start searching tree from the root to leaves.
  //choose node #(son[]) IF input bit = 0
  //ELSE choose #(son[]+1) (input bit = 1)
  while (c < cTableSize) do begin
    c := c + GetBit;
    c := Child[c];
  end;

  c := c - cTableSize;
  update(c);
  Decodechar := SmallInt(c);
end;

function TLZHStream.DecodePosition: Word;
var
  i, j, c: Word;
begin
  //Decode upper 6 bits from given table
  i := GetByte;
  c := WORD(cDecTableCode[i] SHL 6);
  j := cDecTableLen[i];

	//Input lower 6 bits directly
  dec(j,2);
  while j <> 0 do begin
    i := (i SHL 1) + GetBit;
    DEC(J);
  end;

  DecodePosition := c OR i AND $3f;
end;


procedure TLZHStream.InitLZH;
begin
  getbuf := 0;
  getlen := 0;
  putlen := 0;
  putbuf := 0;
  OrigSize := 0;
  codesize := 0;
  printcount := 0;
  MatchPos := 0;
  MatchLen := 0;
  FBytesWritten := 0;
  FBytesRead := 0;
  try
    New(LeftLeaf);
    New(ParentLeaf);
    New(RightLeaf);
    New(TextBuff);
    New(freq);
    New(Parent);
    New(Child);
  except
    raise ElzhException.Create('LZH : Cannot get memory for dictionary tables');
  end;
end;


procedure TLZHStream.EndLZH;
begin
  try
    Dispose(Child);
    Dispose(Parent);
    Dispose(freq);
    Dispose(TextBuff);
    Dispose(RightLeaf);
    Dispose(ParentLeaf);
    Dispose(LeftLeaf);
  except
    raise ElzhException.Create('LZH : Error freeing memory for dictionary tables');
  end;
end;


function TLZHStream.Pack(OrigSize: Longint): Longint;
var
  ct : BYTE;
  i, len, r, s, last_match_length : SmallInt;
  Got : WORD;
begin
  FAction := acCompress;

  FUnCompressedSize := OrigSize;
  InternalWrite(OrigSize, Sizeof(Longint), Got);

  InitLZH;
  try
    OrigSize := 0;			{ rewind and rescan }

    StartHuff;
    InitTree;

    s := 0;
    r := cStringBufferSize - cLookAheadSize;
    FillChar(TextBuff[0],r,' ');
    len := 0;
    Got := 1;
    while (len < cLookAheadSize) and (Got <> 0) do begin
      InternalRead(ct,1,Got);
      if Got <> 0 then begin
        TextBuff[r + len] := ct;
        inc(len);
      end;
    end;

    OrigSize := len;
    for i := 1 to cLookAheadSize do InsertNode(r - i);

    InsertNode(r);

    repeat
      if (MatchLen > len) then MatchLen := len;

      if (MatchLen <= cThreshHold) then begin
        MatchLen := 1;
        EncodeChar(TextBuff[r]);
      end else begin
        EncodeChar(255 - cThreshHold + MatchLen);
        EncodePosition(MatchPos);
      end;

      last_match_length := MatchLen;
      i := 0;
      Got := 1;

      while (i < last_match_length) and (Got <> 0) do begin
        InternalRead(ct,1,Got);
        if Got <> 0 then begin
          DeleteNode(s);
          TextBuff[s] := ct;
          if (s < PRED(cLookAheadSize)) then begin
            TextBuff[s + cStringBufferSize] := ct;
          end;
          s := SUCC(s) and PRED(cStringBufferSize);
          r := SUCC(r) and PRED(cStringBufferSize);
          InsertNode(r);
          inc(i);
        end
      end;
      inc(OrigSize,i);

      while (i < last_match_length) do begin
        inc(i);
        DeleteNode(s);
        s := SUCC(s) and PRED(cStringBufferSize);
        r := SUCC(r) and PRED(cStringBufferSize);
        dec(len);
        if boolean(len) then InsertNode(r);
      end;
    until (len <= 0);

    EncodeEnd;
  finally
    Result := FBytesWritten;
    EndLZH;
  end;
end;

procedure TLZHStream.Unpack;
var
  c, i, j, k, r: SmallInt;
  c2: Byte;
  count: Longint;
  Put: Word;
begin
  FAction := acDecompress;

  InitLZH;
  try
    StartHuff;
    r := cStringBufferSize - cLookAheadSize;
    FillChar(TextBuff[0],r,' ');

    Count := 0;
    InternalRead(OrigSize, Sizeof(LongInt), Put);

    while count < OrigSize do begin
      c := DecodeChar;
      if (c < 256) then begin
        c2 := Lo(c);
        InternalWrite(c2,1,Put);
        TextBuff[r] := c;
        INC(r);
        r := r and PRED(cStringBufferSize);
        inc(count);
      end else begin //c >= 256
        i := (r - SUCC(DecodePosition)) and PRED(cStringBufferSize);
        j := c - 255 + cThreshHold;
        for k := 0 to PRED(j) do begin
          c := TextBuff[(i + k) and PRED(cStringBufferSize)];
          c2 := Lo(c);
          InternalWrite(c2,1,Put);
          TextBuff[r] := c;
          inc(r);
          r := r and PRED(cStringBufferSize);
          INC(count);
        end;
      end;
    end;
  finally
    ENDLZH;
  end;
end;

procedure TLZHStream.InternalRead(var Data; Size: Word;
  var BytesRead: Word);
begin
  ReadData(Data, Size, BytesRead);
  Inc(FBytesRead, BytesRead);
end;

procedure TLZHStream.InternalWrite(const Data; Size: Word;
  var BytesWritten: Word);
begin
  if (FAction = acCompress) and (FBytesWritten + Size > FUncompressedSize) then
    raise ElzhException.Create('Compressed file is larger than the original.');
    
  WriteData(Data, Size, BytesWritten);
  Inc(FBytesWritten, BytesWritten);
end;


constructor TLZHStream.Create(Source, Dest: TStream);
begin
  inherited Create;
  FSource := Source;
  FDest := Dest;
end;

procedure TLZHStream.ReadData(var Data; Size: Word; var BytesRead: Word);
begin
  BytesRead := FSource.Read(Data, Size);
end;

procedure TLZHStream.WriteData(const Data; Size: Word; var BytesWritten: Word);
begin
  BytesWritten := FDest.Write(Data, Size);
end;


end.

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本福利一区二区| 亚洲免费毛片网站| 日韩午夜激情av| 欧美日韩美少妇| 欧美日韩日本视频| 精品视频在线视频| 欧美日韩精品免费观看视频| 欧美少妇一区二区| 欧美日韩视频不卡| 7777精品伊人久久久大香线蕉超级流畅| 99免费精品在线| 91麻豆国产福利精品| 在线观看av一区| 精品视频在线视频| 日韩一区二区电影| 欧美大片拔萝卜| 精品福利av导航| 国产午夜精品久久久久久免费视| 久久先锋资源网| 国产欧美日韩亚州综合| 国产精品网曝门| 亚洲欧美视频在线观看| 亚洲成人免费av| 日韩精品一区第一页| 久久精品国产亚洲aⅴ| 激情综合网av| 不卡视频一二三四| 91久久精品网| 制服丝袜在线91| 精品国产凹凸成av人网站| 国产网红主播福利一区二区| 国产精品久久久久久久久免费丝袜| 国产精品国产三级国产普通话蜜臀| 日韩理论片中文av| 日韩高清在线不卡| 国产在线精品一区二区不卡了 | 亚洲在线视频一区| 午夜成人在线视频| 国产高清成人在线| 97精品视频在线观看自产线路二| 色吊一区二区三区| 3d成人动漫网站| 中文av一区二区| 亚洲成人av中文| 国产盗摄精品一区二区三区在线| 一本久道中文字幕精品亚洲嫩| 欧美日韩国产高清一区二区| 精品国产精品一区二区夜夜嗨| 国产精品久久福利| 午夜精品久久久久久久久| 国产一本一道久久香蕉| 在线观看亚洲精品视频| 日韩精品一区国产麻豆| 亚洲免费在线看| 久久se这里有精品| 在线欧美一区二区| 久久久国产午夜精品| 亚洲主播在线观看| 国模冰冰炮一区二区| 欧美影院一区二区| 久久久久久久久久久黄色| 亚洲伊人伊色伊影伊综合网| 国产乱色国产精品免费视频| 欧美亚男人的天堂| 国产精品免费视频观看| 日韩av一区二区三区四区| av激情综合网| 日韩免费看的电影| 亚洲一区二区三区爽爽爽爽爽| 国产成人精品亚洲午夜麻豆| 91麻豆精品91久久久久同性| 亚洲欧洲日韩在线| 国产在线播放一区| 欧美日韩国产小视频| 国产精品久久久久aaaa樱花| 狠狠色丁香婷婷综合| 91精品国产日韩91久久久久久| 亚洲婷婷综合色高清在线| 国产剧情一区在线| 日韩视频在线一区二区| 亚洲一级电影视频| 99久久精品99国产精品| 日本一区二区视频在线观看| 奇米色一区二区| 欧美视频一区二区三区四区 | 国产大片一区二区| 欧美精品在线视频| 亚洲影视资源网| 91视频com| 亚洲婷婷综合久久一本伊一区| 国产成人自拍网| 26uuu精品一区二区| 琪琪一区二区三区| 欧美一卡二卡三卡四卡| 亚洲国产欧美一区二区三区丁香婷| 99久久综合狠狠综合久久| 久久久99久久精品欧美| 开心九九激情九九欧美日韩精美视频电影| 欧美色视频一区| 亚洲黄色录像片| 在线观看三级视频欧美| 亚洲精品一二三| 在线中文字幕不卡| 亚洲综合无码一区二区| 91久久精品日日躁夜夜躁欧美| 国产精品美女久久久久久| 大尺度一区二区| 国产精品理论片| 99re热这里只有精品免费视频| 国产精品五月天| 99久久精品免费| 亚洲乱码国产乱码精品精的特点| 99国产精品一区| 亚洲色欲色欲www| 99久久精品久久久久久清纯| 亚洲免费观看高清| 欧美色综合网站| 免费亚洲电影在线| 久久免费午夜影院| 国产夫妻精品视频| 中文字幕中文乱码欧美一区二区| av电影一区二区| 亚洲综合精品自拍| 欧美高清hd18日本| 久久99精品久久只有精品| 国产亚洲成年网址在线观看| 国产suv精品一区二区三区| 国产精品久久久久国产精品日日| 91在线播放网址| 亚洲国产欧美一区二区三区丁香婷| 欧美精品一二三四| 精品无码三级在线观看视频| 欧美国产一区在线| 色视频欧美一区二区三区| 午夜欧美在线一二页| 日韩欧美国产三级电影视频| 国产激情精品久久久第一区二区| 中文字幕一区二区三区乱码在线| 欧美日韩一卡二卡三卡| 九九**精品视频免费播放| 国产精品福利av| 欧美三区在线观看| 久久99久久久久| 亚洲视频你懂的| 欧美一区二区在线看| 国产宾馆实践打屁股91| 一区二区三区电影在线播| 日韩午夜激情av| 99久久国产综合精品女不卡| 石原莉奈在线亚洲三区| 久久精品一级爱片| 色哦色哦哦色天天综合| 蜜桃久久精品一区二区| 国产精品女同互慰在线看 | 亚洲乱码国产乱码精品精的特点 | 成人精品一区二区三区四区| 亚洲综合色视频| 欧美精品一区二区三区在线| 色噜噜狠狠成人网p站| 国模无码大尺度一区二区三区| 亚洲视频一区在线| 精品国产成人在线影院| 欧美综合视频在线观看| 国产乱理伦片在线观看夜一区| 亚洲免费观看在线视频| 久久久国产一区二区三区四区小说| 在线一区二区视频| 国产精品一区三区| 日韩激情一二三区| 亚洲手机成人高清视频| 久久久亚洲欧洲日产国码αv| 欧美图区在线视频| 高清成人在线观看| 美女视频网站黄色亚洲| 一二三四社区欧美黄| 国产女人18毛片水真多成人如厕| 91精品国产综合久久国产大片| 波多野结衣91| 国产美女精品在线| 美女一区二区三区在线观看| 一区二区三区高清在线| 国产精品国产三级国产有无不卡 | 欧美一区二区三区四区久久| av日韩在线网站| 国产高清精品在线| 激情图区综合网| 日韩二区三区在线观看| 一区二区激情视频| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆 | 91成人免费在线| 9l国产精品久久久久麻豆| 国产精品系列在线播放| 韩国在线一区二区| 久久99久久精品| 奇米一区二区三区av| 日韩福利视频导航| 青青草原综合久久大伊人精品优势 | 国产精品久久久久永久免费观看| 精品国产乱码久久久久久浪潮| 欧美变态凌虐bdsm|