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

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

?? cmplzh.pas

?? Delphi控件
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
    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 TAbstractLZH.Reconstruct;
var
  i, j, k, tmp: Int16;
  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 TAbstractLZH.update(c: Int16);
var
  i, j, k, l: Int16;
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 TAbstractLZH.EncodeChar(c: WORD);
var
  i: Word;
  j, k: Int16;
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 TAbstractLZH.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 TAbstractLZH.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 TAbstractLZH.DecodeChar: Int16;
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 := Int16(c);
end;

function TAbstractLZH.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;

  Result := c or i and $3f;
end;


procedure TAbstractLZH.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 TAbstractLZH.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 TAbstractLZH.Pack(OrigSize: Longint): Longint;
var
  ct: BYTE;
  i, len, r, s, last_match_length: Int16;
  Got: WORD;
begin
  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;

function TAbstractLZH.Unpack: Longint;
var
  c, i, j, k, r: Int16;
  c2: Byte;
  Count: Longint;
  Put: Word;
begin
  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;
    Result := FBytesWritten;
  end;
end;

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

procedure TAbstractLZH.InternalWrite(const Data; Size: Word;
  var BytesWritten: Word);
begin
  WriteData(Data, Size, BytesWritten);
  Inc(FBytesWritten, BytesWritten);
end;


{ TLZHStream }

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.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲自拍偷拍网站| 国内精品久久久久影院薰衣草| 国产乱妇无码大片在线观看| 久久久久久久久久电影| 欧美熟乱第一页| 精品国产乱码久久久久久免费 | 亚洲图片欧美视频| 欧美亚男人的天堂| 久久精品久久99精品久久| 久久久综合视频| eeuss鲁片一区二区三区在线看| 亚洲欧洲av在线| 欧美日韩精品免费观看视频 | 精品电影一区二区三区| 福利一区福利二区| 亚洲国产精品久久不卡毛片| 精品奇米国产一区二区三区| 成人aa视频在线观看| 亚洲成人精品在线观看| 精品99999| 91久久精品一区二区| 免费的成人av| 综合久久久久久| 欧美r级在线观看| 91碰在线视频| 国产美女精品一区二区三区| 一区二区三区免费网站| 精品1区2区在线观看| 色8久久人人97超碰香蕉987| 国产精品自拍av| 亚洲国产精品一区二区www在线| 久久精品视频网| 欧美久久一区二区| 99热在这里有精品免费| 国产综合久久久久久久久久久久| 亚洲综合免费观看高清完整版| 久久久综合视频| 91精品国产91久久久久久一区二区 | 1024精品合集| 久久久久久久精| 日韩一区二区三区电影在线观看 | 三级在线观看一区二区| 国产精品麻豆网站| 精品女同一区二区| 91成人在线精品| 成人av在线资源网| 国产自产高清不卡| 日韩一区精品视频| 亚洲综合在线电影| 国产精品视频在线看| 久久久久国产成人精品亚洲午夜| 欧美日韩国产高清一区| 在线精品视频一区二区| 99综合电影在线视频| 国产成人无遮挡在线视频| 久久精品理论片| 日韩福利视频导航| 日韩精品一二三四| 夜夜爽夜夜爽精品视频| 亚洲激情自拍偷拍| 一区二区三区四区精品在线视频| 中文字幕免费观看一区| 国产亚洲自拍一区| 久久综合九色综合久久久精品综合| 欧美一区日本一区韩国一区| 欧美日韩国产综合一区二区| 欧美日韩亚洲综合一区| 欧美日韩在线三区| 欧美日产国产精品| 777奇米四色成人影色区| 911国产精品| 日韩欧美区一区二| 精品国产一区二区三区久久影院| 日韩久久久久久| 久久综合色一综合色88| 久久久久久久久久久久久久久99 | 中文字幕亚洲一区二区va在线| 久久精品网站免费观看| 欧美国产精品中文字幕| 中文字幕一区av| 中文字幕一区二区日韩精品绯色| 国产精品久久福利| 夜夜嗨av一区二区三区| 婷婷国产在线综合| 日本不卡免费在线视频| 麻豆国产欧美一区二区三区| 九九国产精品视频| 国产精品亚洲一区二区三区妖精 | 久久成人免费网| 国产麻豆一精品一av一免费| 成人免费电影视频| 欧美三级电影在线看| 日韩精品中午字幕| 国产精品成人午夜| 洋洋av久久久久久久一区| 日韩黄色一级片| 国产精一区二区三区| 成人一级视频在线观看| 色www精品视频在线观看| 日韩天堂在线观看| 国产精品无遮挡| 亚洲蜜臀av乱码久久精品蜜桃| 亚洲黄色av一区| 蜜桃av噜噜一区| 99久久精品免费看| 欧美一卡2卡三卡4卡5免费| 久久久久久久久久久久久久久99| 亚洲美女区一区| 黄网站免费久久| 91久久精品一区二区二区| 2023国产精华国产精品| 一区二区三区日韩在线观看| 久久国产尿小便嘘嘘尿| 一本久久综合亚洲鲁鲁五月天| 日韩一二三区视频| 亚洲女人小视频在线观看| 精品一区二区三区在线视频| 色妞www精品视频| 久久久久综合网| 午夜免费久久看| www.成人在线| 精品国产a毛片| 日韩黄色免费网站| 91丨九色porny丨蝌蚪| 精品国产1区二区| 午夜天堂影视香蕉久久| 成人av网在线| 欧美精品一区二区精品网| 亚洲电影一级片| 99国产精品国产精品毛片| 久久人人爽人人爽| 日韩高清不卡在线| 欧美在线观看禁18| 中文字幕一区二区5566日韩| 国产一区日韩二区欧美三区| 欧美精品久久一区二区三区| 亚洲同性同志一二三专区| 国产乱码精品一品二品| 欧美一级电影网站| 天堂影院一区二区| 91国偷自产一区二区使用方法| 欧美国产日韩在线观看| 黄页视频在线91| 精品乱人伦小说| 免费的成人av| 日韩一区二区在线看片| 日本怡春院一区二区| 欧美三级中文字| 亚洲国产日韩一区二区| 色婷婷综合久色| 亚洲日本欧美天堂| 91天堂素人约啪| 亚洲人成精品久久久久久| 成人激情免费网站| 国产精品第13页| 成人黄色a**站在线观看| 亚洲国产成人自拍| 成人av在线资源| 中文字幕在线不卡一区二区三区| 处破女av一区二区| 国产精品视频一二三| 国产凹凸在线观看一区二区| 中文字幕欧美区| 成人激情动漫在线观看| 亚洲婷婷综合久久一本伊一区| 成人一区二区三区在线观看| 国产精品乱子久久久久| 99麻豆久久久国产精品免费| 亚洲免费在线视频一区 二区| 色综合色综合色综合色综合色综合 | 精品一区二区三区久久久| 欧美成人aa大片| 国产精品一区二区黑丝| 国产精品免费aⅴ片在线观看| av不卡一区二区三区| 有码一区二区三区| 欧美一三区三区四区免费在线看 | 国产精品视频观看| 91免费视频大全| 亚洲午夜在线电影| 欧美另类高清zo欧美| 久久99精品国产.久久久久久 | 国产精品传媒在线| 91国在线观看| 美女脱光内衣内裤视频久久网站| 欧美成人在线直播| 成人黄色一级视频| 亚洲国产综合在线| 精品国产不卡一区二区三区| av中文字幕亚洲| 亚洲国产另类av| 久久亚洲私人国产精品va媚药| 成人一级片在线观看| 亚洲午夜精品在线| 精品久久久久一区二区国产| 成人avav影音| 日韩av一级电影| 国产精品成人免费精品自在线观看| 欧美日韩亚洲不卡| 国产成人精品综合在线观看|