数据压缩 -- 源码[6]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 luckyjan 的 blog

      c:=getbits(cbit);
      for i:=0 to pred(nc) do
        clen^[i]:=0;
      for i:=0 to 4095 do
        ctable^[i]:=c;
    end else begin
      i:=0;
      while i<n do begin
        c:=pttable[bitbuf shr (bitbufsiz-8)];
        if c>=nt then
          begin
            mask:=1 shl (bitbufsiz-9);
            repeat
              if (bitbuf and mask)<>0 then
                c:=right^[c]
              else
                c:=left^[c];
              mask:=mask shr 1;
            until c<nt;
          end;
        fillbuf(ptlen[c]);
        if c<=2 then
          begin
            if c=1 then
              c:=2+getbits(4)
            else
              if c=2 then
                c:=19+getbits(cbit);
            while c>=0 do begin
              clen^[i]:=0;inc(i);dec(c);
            end;
          end else begin
            clen^[i]:=c-2;inc(i);
          end;
      end;
      while i<nc do begin
        clen^[i]:=0;inc(i);
      end;
      maketable(nc,pbyte(clen),12,pword(ctable));
    end;
end;

function decodec:word;
var
  j,mask:word;
begin
  if blocksize=0 then
    begin
      blocksize:=getbits(16);
      readptlen(nt,tbit,3);
      readclen;
      readptlen(np,pbit,-1);
    end;
  dec(blocksize);
  j:=ctable^[bitbuf shr (bitbufsiz-12)];
  if j>=nc then
    begin
      mask:=1 shl (bitbufsiz-13);
      repeat
        if (bitbuf and mask)<>0 then
          j:=right^[j]
        else
          j:=left^[j];
        mask:=mask shr 1;
      until j<nc;
    end;
  fillbuf(clen^[j]);
  decodec:=j;
end;

function decodep:word;
var
  j,mask:word;
begin
  j:=pttable[bitbuf shr (bitbufsiz-8)];
  if j>=np then
    begin
      mask:=1 shl (bitbufsiz-9);
      repeat
        if (bitbuf and mask)<>0 then
          j:=right^[j]
        else
          j:=left^[j];
        mask:=mask shr 1;
      until j<np;
    end;
  fillbuf(ptlen[j]);
  if j<>0 then
    begin
      dec(j);j:=(1 shl j)+getbits(j);
    end;
  decodep:=j;

本文关键:数据压缩 -- 源码
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top