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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? zlib.pas

?? 比較經(jīng)典的壓縮算法
?? PAS
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
  if code < 0 then
    raise ECompressionError.Create('error'); //!!
end;

function DCheck(code: Integer): Integer;
begin
  Result := code;
  if code < 0 then
    raise EDecompressionError.Create('error');  //!!
end;

procedure CompressBuf(const InBuf: Pointer; InBytes: Integer;
                      out OutBuf: Pointer; out OutBytes: Integer);
var
  strm: TZStreamRec;
  P: Pointer;
begin
  FillChar(strm, sizeof(strm), 0);
  strm.zalloc := zlibAllocMem;
  strm.zfree := zlibFreeMem;
  OutBytes := ((InBytes + (InBytes div 10) + 12) + 255) and not 255;
  GetMem(OutBuf, OutBytes);
  try
    strm.next_in := InBuf;
    strm.avail_in := InBytes;
    strm.next_out := OutBuf;
    strm.avail_out := OutBytes;
    CCheck(deflateInit_(strm, Z_BEST_COMPRESSION, zlib_version, sizeof(strm)));
    try
      while CCheck(deflate(strm, Z_FINISH)) <> Z_STREAM_END do
      begin
        P := OutBuf;
        Inc(OutBytes, 256);
        ReallocMem(OutBuf, OutBytes);
        strm.next_out := PChar(Integer(OutBuf) + (Integer(strm.next_out) - Integer(P)));
        strm.avail_out := 256;
      end;
    finally
      CCheck(deflateEnd(strm));
    end;
    ReallocMem(OutBuf, strm.total_out);
    OutBytes := strm.total_out;
  except
    FreeMem(OutBuf);
    raise
  end;
end;


procedure DecompressBuf(const InBuf: Pointer; InBytes: Integer;
  OutEstimate: Integer; out OutBuf: Pointer; out OutBytes: Integer);
var
  strm: TZStreamRec;
  P: Pointer;
  BufInc: Integer;
begin
  FillChar(strm, sizeof(strm), 0);
  strm.zalloc := zlibAllocMem;
  strm.zfree := zlibFreeMem;
  BufInc := (InBytes + 255) and not 255;
  if OutEstimate = 0 then
    OutBytes := BufInc
  else
    OutBytes := OutEstimate;
  GetMem(OutBuf, OutBytes);
  try
    strm.next_in := InBuf;
    strm.avail_in := InBytes;
    strm.next_out := OutBuf;
    strm.avail_out := OutBytes;
    DCheck(inflateInit_(strm, zlib_version, sizeof(strm)));
    try
      while DCheck(inflate(strm, Z_FINISH)) <> Z_STREAM_END do
      begin
        P := OutBuf;
        Inc(OutBytes, BufInc);
        ReallocMem(OutBuf, OutBytes);
        strm.next_out := PChar(Integer(OutBuf) + (Integer(strm.next_out) - Integer(P)));
        strm.avail_out := BufInc;
      end;
    finally
      DCheck(inflateEnd(strm));
    end;
    ReallocMem(OutBuf, strm.total_out);
    OutBytes := strm.total_out;
  except
    FreeMem(OutBuf);
    raise
  end;
end;


// TCustomZlibStream

constructor TCustomZLibStream.Create(Strm: TStream);
begin
  inherited Create;
  FStrm := Strm;
  FStrmPos := Strm.Position;
  FZRec.zalloc := zlibAllocMem;
  FZRec.zfree := zlibFreeMem;
end;

procedure TCustomZLibStream.Progress(Sender: TObject);
begin
  if Assigned(FOnProgress) then FOnProgress(Sender);
end;


// TCompressionStream

constructor TCompressionStream.Create(CompressionLevel: TCompressionLevel;
  Dest: TStream);
const
  Levels: array [TCompressionLevel] of ShortInt =
    (Z_NO_COMPRESSION, Z_BEST_SPEED, Z_DEFAULT_COMPRESSION, Z_BEST_COMPRESSION);
begin
  inherited Create(Dest);
  FZRec.next_out := FBuffer;
  FZRec.avail_out := sizeof(FBuffer);
  CCheck(deflateInit_(FZRec, Levels[CompressionLevel], zlib_version, sizeof(FZRec)));
end;

destructor TCompressionStream.Destroy;
begin
  FZRec.next_in := nil;
  FZRec.avail_in := 0;
  try
    if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos;
    while (CCheck(deflate(FZRec, Z_FINISH)) <> Z_STREAM_END)
      and (FZRec.avail_out = 0) do
    begin
      FStrm.WriteBuffer(FBuffer, sizeof(FBuffer));
      FZRec.next_out := FBuffer;
      FZRec.avail_out := sizeof(FBuffer);
    end;
    if FZRec.avail_out < sizeof(FBuffer) then
      FStrm.WriteBuffer(FBuffer, sizeof(FBuffer) - FZRec.avail_out);
  finally
    deflateEnd(FZRec);
  end;
  inherited Destroy;
end;

function TCompressionStream.Read(var Buffer; Count: Longint): Longint;
begin
  raise ECompressionError.Create('Invalid stream operation');
end;

function TCompressionStream.Write(const Buffer; Count: Longint): Longint;
begin
  FZRec.next_in := @Buffer;
  FZRec.avail_in := Count;
  if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos;
  while (FZRec.avail_in > 0) do
  begin
    CCheck(deflate(FZRec, 0));
    if FZRec.avail_out = 0 then
    begin
      FStrm.WriteBuffer(FBuffer, sizeof(FBuffer));
      FZRec.next_out := FBuffer;
      FZRec.avail_out := sizeof(FBuffer);
      FStrmPos := FStrm.Position;
      Progress(Self);
    end;
  end;
  Result := Count;
end;

function TCompressionStream.Seek(Offset: Longint; Origin: Word): Longint;
begin
  if (Offset = 0) and (Origin = soFromCurrent) then
    Result := FZRec.total_in
  else
    raise ECompressionError.Create('Invalid stream operation');
end;

function TCompressionStream.GetCompressionRate: Single;
begin
  if FZRec.total_in = 0 then
    Result := 0
  else
    Result := (1.0 - (FZRec.total_out / FZRec.total_in)) * 100.0;
end;


// TDecompressionStream

constructor TDecompressionStream.Create(Source: TStream);
begin
  inherited Create(Source);
  FZRec.next_in := FBuffer;
  FZRec.avail_in := 0;
  DCheck(inflateInit_(FZRec, zlib_version, sizeof(FZRec)));
end;

destructor TDecompressionStream.Destroy;
begin
  inflateEnd(FZRec);
  inherited Destroy;
end;

function TDecompressionStream.Read(var Buffer; Count: Longint): Longint;
begin
  FZRec.next_out := @Buffer;
  FZRec.avail_out := Count;
  if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos;
  while (FZRec.avail_out > 0) do
  begin
    if FZRec.avail_in = 0 then
    begin
      FZRec.avail_in := FStrm.Read(FBuffer, sizeof(FBuffer));
      if FZRec.avail_in = 0 then
        begin
          Result := Count - FZRec.avail_out;
          Exit;
        end;
      FZRec.next_in := FBuffer;
      FStrmPos := FStrm.Position;
      Progress(Self);
    end;
    CCheck(inflate(FZRec, 0));
  end;
  Result := Count;
end;

function TDecompressionStream.Write(const Buffer; Count: Longint): Longint;
begin
  raise EDecompressionError.Create('Invalid stream operation');
end;

function TDecompressionStream.Seek(Offset: Longint; Origin: Word): Longint;
var
  I: Integer;
  Buf: array [0..4095] of Char;
begin
  if (Offset = 0) and (Origin = soFromBeginning) then
  begin
    DCheck(inflateReset(FZRec));
    FZRec.next_in := FBuffer;
    FZRec.avail_in := 0;
    FStrm.Position := 0;
    FStrmPos := 0;
  end
  else if ( (Offset >= 0) and (Origin = soFromCurrent)) or
          ( ((Offset - FZRec.total_out) > 0) and (Origin = soFromBeginning)) then
  begin
    if Origin = soFromBeginning then Dec(Offset, FZRec.total_out);
    if Offset > 0 then
    begin
      for I := 1 to Offset div sizeof(Buf) do
        ReadBuffer(Buf, sizeof(Buf));
      ReadBuffer(Buf, Offset mod sizeof(Buf));
    end;
  end
  else
    raise EDecompressionError.Create('Invalid stream operation');
  Result := FZRec.total_out;
end;



end.

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美国产一区二区三区| 午夜精品免费在线观看| 久久综合九色综合97婷婷| 欧美日韩成人高清| 欧美日韩aaaaaa| 337p亚洲精品色噜噜| 欧美一区二区视频观看视频| 欧美一区二区三区播放老司机| 3d动漫精品啪啪| 91精品国产综合久久精品麻豆| 91精品国产入口| 日韩欧美一二三四区| 久久久久久99精品| 国产精品久久久久永久免费观看 | 欧美系列亚洲系列| 欧美性色aⅴ视频一区日韩精品| 色婷婷综合久久久中文字幕| 在线视频你懂得一区二区三区| 精品视频资源站| 精品少妇一区二区三区视频免付费 | 国产在线精品一区二区不卡了| 激情图区综合网| 懂色av噜噜一区二区三区av| 91丨porny丨国产| 欧美日韩午夜在线| 日韩免费观看2025年上映的电影| 久久久久97国产精华液好用吗| 欧美极品少妇xxxxⅹ高跟鞋| 亚洲色大成网站www久久九九| 有码一区二区三区| 日韩电影免费在线观看网站| 国产一区 二区| av一区二区不卡| 69av一区二区三区| 久久先锋影音av鲁色资源| 亚洲人妖av一区二区| 婷婷综合另类小说色区| 韩国女主播成人在线| 一本大道久久a久久精品综合| 欧美伦理电影网| 欧美国产日本韩| 亚洲国产成人av| 国产成人av在线影院| 欧美性大战久久| 久久久久久一二三区| 亚洲一区二区三区在线播放| 极品少妇一区二区三区精品视频| 99re亚洲国产精品| 日韩美一区二区三区| 中文字幕一区二区三区乱码在线 | 麻豆极品一区二区三区| 成人国产精品免费| 7777精品伊人久久久大香线蕉完整版 | 国产v综合v亚洲欧| 欧美色中文字幕| 久久精品视频网| 五月天欧美精品| 99综合电影在线视频| 日韩一区二区三区视频在线| 亚洲私人影院在线观看| 国产制服丝袜一区| 欧美日韩一区三区四区| 国产精品美女久久久久av爽李琼| 日韩影院在线观看| 色综合一区二区| 久久免费国产精品| 免费在线观看日韩欧美| 色诱视频网站一区| 久久亚洲精精品中文字幕早川悠里| 一区二区三区不卡视频| 丁香婷婷综合色啪| 精品剧情在线观看| 亚洲福利视频三区| 91免费看`日韩一区二区| 精品日韩在线一区| 青青青伊人色综合久久| 日本久久电影网| 中文一区二区在线观看| 美女国产一区二区三区| 精品视频在线视频| 亚洲美女屁股眼交3| 国产精品18久久久久| 日韩精品在线网站| 日韩精品电影一区亚洲| 欧美三级电影在线看| 椎名由奈av一区二区三区| 国产精品2024| 久久久蜜桃精品| 精品在线播放免费| 欧美电影免费观看高清完整版在线 | 亚洲三级电影网站| 成人自拍视频在线观看| 久久蜜臀精品av| 狠狠色丁香九九婷婷综合五月| 4438x成人网最大色成网站| 亚洲高清视频在线| 色综合久久六月婷婷中文字幕| 国产精品天天看| 国产成人精品亚洲777人妖| 久久久99免费| 国产福利91精品| 欧美激情一区二区三区全黄| 国产一区二区三区日韩| 日韩美女视频一区二区在线观看| 日精品一区二区| 91精选在线观看| 久久精品国产一区二区| 日韩免费在线观看| 国模大尺度一区二区三区| 精品国产一区二区三区四区四 | 成人听书哪个软件好| 久久久99久久精品欧美| 国产成人精品免费看| 国产精品区一区二区三区| 成人免费看的视频| 国产精品不卡一区| 色婷婷av一区二区三区软件 | 不卡大黄网站免费看| 亚洲女同一区二区| 欧美丝袜丝交足nylons| 蜜臀av在线播放一区二区三区| 欧美videossexotv100| 国产一区二区三区蝌蚪| 国产欧美日韩麻豆91| 成人免费看的视频| 亚洲自拍与偷拍| 欧美一卡二卡三卡| 国产精品中文字幕日韩精品 | 美腿丝袜一区二区三区| 精品盗摄一区二区三区| 不卡视频免费播放| 亚洲午夜电影在线| 欧美电影免费观看高清完整版在| 国产在线视视频有精品| 亚洲国产高清aⅴ视频| 色综合色综合色综合色综合色综合| 一个色妞综合视频在线观看| 制服丝袜激情欧洲亚洲| 国产精品影视天天线| 亚洲视频一区在线观看| 欧美唯美清纯偷拍| 国产综合久久久久久鬼色 | 国产69精品久久777的优势| 亚洲猫色日本管| 欧美一区二区在线观看| 国产很黄免费观看久久| 亚洲综合久久av| xfplay精品久久| 日本韩国欧美一区二区三区| 奇米色一区二区三区四区| 欧美国产精品一区| 欧美一区永久视频免费观看| 成人免费视频一区二区| 日韩中文字幕不卡| 国产精品动漫网站| 日韩一区二区三免费高清| 成人app在线| 奇米影视一区二区三区小说| 自拍偷拍国产亚洲| 2021中文字幕一区亚洲| 欧美性大战久久久久久久| 国产成人免费视频网站| 无码av中文一区二区三区桃花岛| 久久免费午夜影院| 在线综合+亚洲+欧美中文字幕| 成人午夜av在线| 人人超碰91尤物精品国产| 亚洲视频在线观看三级| 久久伊人中文字幕| 欧美日韩亚洲综合| 99久久婷婷国产| 国产精品一二三四五| 日韩制服丝袜av| 亚洲欧美日韩在线| 中文字幕精品综合| 欧美mv日韩mv| 91精品国产免费| 日本韩国欧美在线| 99国产欧美久久久精品| 激情小说欧美图片| 日本在线不卡视频| 亚洲线精品一区二区三区八戒| 中文字幕在线观看一区二区| 精品国产sm最大网站| 91精品欧美久久久久久动漫| 在线这里只有精品| 成人动漫一区二区在线| 国产伦精品一区二区三区视频青涩 | 国产一区三区三区| 男男gaygay亚洲| 五月激情丁香一区二区三区| 亚洲精品久久久蜜桃| 国产精品久久久久久福利一牛影视 | aaa亚洲精品| 高清av一区二区| 国产a级毛片一区| 粉嫩欧美一区二区三区高清影视| 激情丁香综合五月| 国产做a爰片久久毛片| 另类小说色综合网站|