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

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

?? bszlibcompress.pas

?? 一套支持Delphi的VCL庫
?? PAS
字號:
{*******************************************************************}
{                                                                   }
{       Almediadev Visual Component Library                         }
{       BusinessSkinForm                                            }
{       Version 6.15                                                }
{                                                                   }
{       Copyright (c) 2000-2008 Almediadev                          }
{       ALL RIGHTS RESERVED                                         }
{                                                                   }
{       Home:  http://www.almdev.com                                }
{       Support: support@almdev.com                                 }
{                                                                   }
{*******************************************************************}

unit bszlibcompress;

{$WARNINGS OFF}
{$HINTS OFF}


interface

uses Sysutils, Classes, bszlib;

const
  BufSize = 4096;
   
type
  TAlloc = function (AppData: Pointer; Items, Size: Integer): Pointer;
  TFree = procedure (AppData, Block: Pointer);
  TZStreamRec = z_stream;

  TCustomZlibStream = class(TStream)
  private
    FStrm: TStream;
    FStrmPos: Integer;
    FOnProgress: TNotifyEvent;
    FZRec: TZStreamRec;
    FBuffer: array [0..BufSize - 1] of Char;
  protected
    procedure Progress(Sender: TObject); dynamic;
    property OnProgress: TNotifyEvent read FOnProgress write FOnProgress;
    constructor Create(Strm: TStream);
  end;

  TCompressionLevel = (clNone, clFastest, clDefault, clMax);

  TCompressionStream = class(TCustomZlibStream)
  private
    function GetCompressionRate: Single;
  public
    constructor Create(CompressionLevel: TCompressionLevel; Dest: TStream);
    destructor Destroy; override;
    function Read(var Buffer; Count: Longint): Longint; override;
    function Write(const Buffer; Count: Longint): Longint; override;
    function Seek(Offset: Longint; Origin: Word): Longint; override;
    property CompressionRate: Single read GetCompressionRate;
    property OnProgress;
  end;

  TDecompressionStream = class(TCustomZlibStream)
  public
    constructor Create(Source: TStream);
    destructor Destroy; override;
    function Read(var Buffer; Count: Longint): Longint; override;
    function Write(const Buffer; Count: Longint): Longint; override;
    function Seek(Offset: Longint; Origin: Word): Longint; override;
    property OnProgress;
  end;

const
  zlib_version = '1.1.4';

type
  EZlibError = class(Exception);
  ECompressionError = class(EZlibError);
  EDecompressionError = class(EZlibError);

procedure CompressStream(Stream, SaveStream: TStream);
procedure DeCompressStream(Stream, CompressedStream: TStream);

implementation

const
  Z_NO_FLUSH      = 0;
  Z_PARTIAL_FLUSH = 1;
  Z_SYNC_FLUSH    = 2;
  Z_FULL_FLUSH    = 3;
  Z_FINISH        = 4;

  Z_OK            = 0;
  Z_STREAM_END    = 1;
  Z_NEED_DICT     = 2;
  Z_ERRNO         = (-1);
  Z_STREAM_ERROR  = (-2);
  Z_DATA_ERROR    = (-3);
  Z_MEM_ERROR     = (-4);
  Z_BUF_ERROR     = (-5);
  Z_VERSION_ERROR = (-6);

  Z_NO_COMPRESSION       =   0;
  Z_BEST_SPEED           =   1;
  Z_BEST_COMPRESSION     =   9;
  Z_DEFAULT_COMPRESSION  = (-1);

  Z_FILTERED            = 1;
  Z_HUFFMAN_ONLY        = 2;
  Z_DEFAULT_STRATEGY    = 0;

  Z_BINARY   = 0;
  Z_ASCII    = 1;
  Z_UNKNOWN  = 2;

  Z_DEFLATED = 8;

  _z_errmsg: array[0..9] of PChar = (
    'need dictionary',      // Z_NEED_DICT      (2)
    'stream end',           // Z_STREAM_END     (1)
    '',                     // Z_OK             (0)
    'file error',           // Z_ERRNO          (-1)
    'stream error',         // Z_STREAM_ERROR   (-2)
    'data error',           // Z_DATA_ERROR     (-3)
    'insufficient memory',  // Z_MEM_ERROR      (-4)
    'buffer error',         // Z_BUF_ERROR      (-5)
    'incompatible version', // Z_VERSION_ERROR  (-6)
    ''
  );

procedure _memset(P: Pointer; B: Byte; count: Integer);cdecl;
begin
  FillChar(P^, count, B);
end;

procedure _memcpy(dest, source: Pointer; count: Integer);cdecl;
begin
  Move(source^, dest^, count);
end;

function zcalloc(AppData: Pointer; Items, Size: Integer): Pointer;
begin
  GetMem(Result, Items*Size);
end;

procedure zcfree(AppData, Block: Pointer);
begin
  FreeMem(Block);
end;

function CCheck(code: Integer): Integer;
begin
  Result := code;
  if code < 0 then
    raise ECompressionError.Create('error');  
end;

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

constructor TCustomZLibStream.Create(Strm: TStream);
begin
  inherited Create;
  FStrm := Strm;
  FStrmPos := Strm.Position;
end;

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

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;

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 - Longint(FZRec.avail_out);
          Exit;
        end;
      FZRec.next_in := @FBuffer;
      FStrmPos := FStrm.Position;
      Progress(Self);
    end;
    DCheck(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;

procedure CompressStream(Stream, SaveStream: TStream);
var
  CompStrm: TCompressionStream;
begin
  CompStrm := TCompressionStream.Create(clMax, SaveStream);
  try
    Stream.Seek(0, 0);
    CompStrm.CopyFrom(Stream, 0);
  finally
    CompStrm.Free;
  end;
end;

procedure DeCompressStream(Stream, CompressedStream: TStream);
var
  Size: LongInt;
  DecompStrm: TDecompressionStream;
  Buf: array[0..BufSize - 1] of Byte;
begin
  CompressedStream.Seek(0, 0);
  DeCompStrm := TDecompressionStream.Create(CompressedStream);
  try
    while True do
    begin
      Size := DecompStrm.Read(Buf, BufSize);
      if Size <> 0 then Stream.WriteBuffer(Buf, Size) else Break;
    end;
  finally
    DecompStrm.Free;
  end;
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美网站大全在线观看| 国产婷婷色一区二区三区| 精品国产免费视频| 日韩毛片高清在线播放| 久久综合综合久久综合| 91久久国产最好的精华液| 国产亚洲成aⅴ人片在线观看| 亚洲国产日韩在线一区模特| 成人精品国产一区二区4080| 日韩欧美二区三区| 亚洲动漫第一页| 91免费视频观看| 国产午夜三级一区二区三| 日av在线不卡| 欧美精品丝袜中出| 亚洲一区二区三区四区在线| 99综合影院在线| 国产色综合一区| 久久成人免费网| 日韩欧美精品在线视频| 日韩精品欧美精品| 91精品福利在线| 一二三四社区欧美黄| 91视频在线看| 亚洲欧美国产高清| 91丨九色丨国产丨porny| 中文字幕亚洲一区二区av在线| 国产精品中文字幕日韩精品 | 在线一区二区视频| 国产精品久久久爽爽爽麻豆色哟哟| 紧缚捆绑精品一区二区| 日韩亚洲欧美高清| 蜜桃视频第一区免费观看| 7777精品伊人久久久大香线蕉| 亚洲亚洲精品在线观看| 欧美亚洲图片小说| 亚洲18影院在线观看| 欧美视频一区二区三区四区| 亚洲福利一区二区三区| 欧美一区二区三区影视| 韩国精品一区二区| 国产性天天综合网| 成年人国产精品| 亚洲日本丝袜连裤袜办公室| 在线看日本不卡| 日韩和欧美的一区| 26uuu国产日韩综合| 国产激情视频一区二区在线观看| 亚洲国产成人私人影院tom| 91丝袜美腿高跟国产极品老师| 亚洲精品久久嫩草网站秘色| 欧美日韩极品在线观看一区| 看片的网站亚洲| 国产精品久久二区二区| 日本乱码高清不卡字幕| 日本欧美肥老太交大片| 久久奇米777| 在线观看国产一区二区| 美女网站色91| 国产精品免费丝袜| 欧美亚洲日本国产| 国内成人自拍视频| 一级日本不卡的影视| 日韩欧美国产午夜精品| 成人av电影在线网| 日本午夜一区二区| 国产精品女同互慰在线看| 欧美日韩一本到| 国产乱人伦偷精品视频免下载| 亚洲天堂精品在线观看| 欧美一区二区性放荡片| 99国内精品久久| 免费亚洲电影在线| 亚洲欧美乱综合| 欧美mv日韩mv国产| 欧美性猛片xxxx免费看久爱| 久久99国产精品尤物| 亚洲精品视频在线观看免费| 精品久久久久久久久久久久包黑料| 成人av综合一区| 日韩电影免费一区| 亚洲欧洲日本在线| 欧美精品一区二区高清在线观看| 一本到三区不卡视频| 国产一区不卡在线| 亚洲www啪成人一区二区麻豆| 国产欧美日韩一区二区三区在线观看| 欧美天堂一区二区三区| jizz一区二区| 国产一区二区网址| 六月丁香婷婷久久| 五月综合激情婷婷六月色窝| 中文字幕一区三区| 久久婷婷久久一区二区三区| 欧美一级片在线观看| 欧美性猛交xxxxxxxx| av电影在线观看一区| 国产69精品久久99不卡| 韩国成人精品a∨在线观看| 日本不卡1234视频| 亚洲风情在线资源站| 一区二区三区中文字幕精品精品| 国产女同互慰高潮91漫画| 亚洲精品在线观看网站| 91 com成人网| 欧美一区二区福利在线| 欧美少妇xxx| 欧美日高清视频| 欧美视频三区在线播放| 欧美三级电影一区| 欧美午夜精品免费| 欧美日韩一区在线| 欧美性受极品xxxx喷水| 欧美艳星brazzers| 欧美日韩成人高清| 91精品在线观看入口| 欧美精品在线观看播放| 欧美精品在线一区二区| 欧美一区二区不卡视频| 欧美精品v日韩精品v韩国精品v| 欧美色偷偷大香| 欧美一区二区三区人| 欧美大尺度电影在线| 久久蜜桃av一区二区天堂| 欧美激情一区二区三区在线| 国产精品免费丝袜| 一区二区三区国产豹纹内裤在线| 一区二区三区日韩欧美精品| 亚洲妇熟xx妇色黄| 美女网站视频久久| 成人精品免费网站| 91精品福利视频| 4438x亚洲最大成人网| 日韩欧美第一区| 国产拍揄自揄精品视频麻豆| 中日韩免费视频中文字幕| 亚洲色图清纯唯美| 日本免费新一区视频| 国产精品77777| 91看片淫黄大片一级| 欧美日韩在线不卡| 久久在线观看免费| 亚洲欧洲av一区二区三区久久| 亚洲人成网站影音先锋播放| 婷婷夜色潮精品综合在线| 蜜桃在线一区二区三区| av网站一区二区三区| 欧美三级一区二区| 久久久另类综合| 亚洲一区二区三区四区的| 国产一区二区调教| 欧美日韩精品一区二区三区四区| 日韩免费视频一区二区| 国产精品美女一区二区三区| 天天色图综合网| www.色综合.com| 日韩欧美一区在线| 亚洲欧洲日产国码二区| 久久疯狂做爰流白浆xx| 在线日韩一区二区| 久久久激情视频| 人人狠狠综合久久亚洲| 99久久精品国产观看| 日韩欧美亚洲国产精品字幕久久久| 亚洲欧美日韩在线播放| 激情久久久久久久久久久久久久久久| 99久久国产综合精品色伊 | 欧美精品在线一区二区三区| 国产日韩欧美制服另类| 日日夜夜免费精品视频| 91亚洲国产成人精品一区二区三| 精品国产91九色蝌蚪| 亚洲成人av一区| 一本色道久久综合精品竹菊| 久久久久久久久久久久电影| 日本不卡的三区四区五区| 欧洲精品一区二区三区在线观看| 国产无人区一区二区三区| 美国十次综合导航| 欧美视频一区二| 亚洲美女在线国产| www.欧美.com| 久久久亚洲午夜电影| 蜜桃在线一区二区三区| 欧美丰满一区二区免费视频| 一二三区精品福利视频| 99re成人在线| 国产精品妹子av| 成人精品视频一区| 中文乱码免费一区二区| 国产精品一区二区x88av| 精品国产三级电影在线观看| 久久精品国产亚洲a| 日韩欧美色综合网站| 欧美aⅴ一区二区三区视频| 欧美性感一类影片在线播放| 伊人色综合久久天天| 色婷婷久久久亚洲一区二区三区| 国产精品卡一卡二卡三| 成人美女在线观看|