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

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

?? myldbcompression.pas

?? 一個本地database引擎,支持中文T_Sql查詢,兼容DELPHI標準數據庫控件
?? PAS
?? 第 1 頁 / 共 5 頁
字號:
     FCompressedSize := FUncompressedSize;
     // check if stream size is too small
     if (not FRepair) then
      if (FCompressedStream.Size - FCompressedStream.Position <
          FUncompressedSize) then
        raise EMYLDBException.Create(10081,ErrorLStreamSizeTooSmall,
          [FCompressedStream.Size,
          (FUncompressedSize + FCompressedStream.Position)]);

    end;
  end // no compression
 else
  // create compressed stream, load headers
  InternalCreate(ToCreate);
end; // Create


//------------------------------------------------------------------------------
// Destroy
//------------------------------------------------------------------------------
destructor TMYLDBCompressedBLOBStream.Destroy;
begin
 if (FHeaders <> nil) then
  FHeaders.Free;
 FHeaders := nil;
 inherited;
end; // Destroy


//------------------------------------------------------------------------------
// read from compressed stream
//------------------------------------------------------------------------------
function TMYLDBCompressedBLOBStream.Read(var Buffer; Count: Longint): Longint;
var ReadSize:   Int64;
    OutBuf:     PChar;
begin
 if (FCompressionAlgorithm = acaNone) then
  begin
   Result := FCompressedStream.Read(Buffer,Count);
   FPosition := FCompressedStream.Position - FStartPosition;
  end // no compression
 else
  begin
   Result := 0;
   if ((Count > 0) and (FPosition >= 0) and (FPosition < FUncompressedSize)) then
    begin
     FCurrentHeader := FPosition div FBlockSize;
     while ((FPosition < FUncompressedSize) and (Result < Count)) do
      begin
       LoadBlock(FCurrentHeader,OutBuf);
       // read from current position to the end of the block
       ReadSize := FBlockSize -
        ((FPosition + FBlockSize) mod FBlockSize);
       // if we Result + ReadSize exceeds Count read only Count - Result
       if (Result + ReadSize > Count) then
        ReadSize := Count - Result;
       // reading only till EOF
       if (FPosition + ReadSize >= FUncompressedSize) then
        ReadSize := FUncompressedSize - FPosition;
       if (ReadSize <= 0) then
        raise EMYLDBException.Create(10090,
          ErrorLCannotReadFromStreamInvalidReadSize,[ReadSize]);
       // move data from decompressed buffer to Buffer
       Move(PChar(OutBuf + ((FPosition + FBlockSize) mod FBlockSize))^,
        PChar(PChar(@Buffer) + Result)^,ReadSize);
       FreeMem(OutBuf);
       Inc(Result,ReadSize);
       if (Result < Count) then
        Inc(FCurrentHeader);
       Inc(FPosition,ReadSize);
      end; // reading loop
    end; // FPosition < FUncompressedSize
  end; // compression
end; // Read


//------------------------------------------------------------------------------
// write beyond EOF
//------------------------------------------------------------------------------
procedure TMYLDBCompressedBLOBStream.InternalWriteBeyondEOF;
var OldPos: Int64;
begin
 OldPos := FPosition;
 Self.Position := 0;
 Self.SetSize(OldPos);
 Self.Position := OldPos;
 if (Self.Position <> OldPos) then
  raise EMYLDBException.Create(10091,ErrorLCannotSetPosition,
    [OldPos,FPosition,FUncompressedSize]);
 if (FUncompressedSize <> OldPos) then
  raise EMYLDBException.Create(10092,ErrorLInvalidStreamSize,
    [FUncompressedSize,OldPos]);
end; // InternalWriteBeyondEOF


//------------------------------------------------------------------------------
// write block
//------------------------------------------------------------------------------
procedure TMYLDBCompressedBLOBStream.InternalWriteBlock(InBuf: PChar; InSize: Integer);
var OutBuf:         PChar;
    WriteBytes:     Integer;
    OldPos:         Int64;
begin
  PrepareBufferForWriting(InBuf,InSize,OutBuf,
    FHeaders.Items[FCurrentHeader]);
  try
// Commented By Leo Martin - changed from absolute to relative offset
    FHeaders.Items[FCurrentHeader].OffsetToNextHeader :=
//      FHeaders.Positions[FCurrentHeader] +
        sizeof(TMYLDBCompressedStreamBlockHeader) +
        FHeaders.Items[FCurrentHeader].CompressedSize;

    FCompressedStream.Position := FHeaders.Positions[FCurrentHeader];
    if (FCompressedStream.Position <> FHeaders.Positions[FCurrentHeader]) then
     raise EMYLDBException.Create(10099,ErrorLCannotSetPosition,
      [FHeaders.Positions[FCurrentHeader],
        FCompressedStream.Position,FCompressedStream.Size]);

    OldPos := FCompressedStream.Position;
    WriteBytes := FCompressedStream.Write(FHeaders.Items[FCurrentHeader],
      sizeof(TMYLDBCompressedStreamBlockHeader));
    if (WriteBytes <> sizeof(TMYLDBCompressedStreamBlockHeader)) then
     raise EMYLDBException.Create(10100,ErrorLCannotWriteToStream,
      [OldPos,FCompressedStream.Size,sizeof(TMYLDBCompressedStreamBlockHeader),WriteBytes]);

    OldPos := FCompressedStream.Position;
    WriteBytes := FCompressedStream.Write(OutBuf^,
      FHeaders.Items[FCurrentHeader].CompressedSize);
    if (WriteBytes <> FHeaders.Items[FCurrentHeader].CompressedSize) then
     raise EMYLDBException.Create(10101,ErrorLCannotWriteToStream,
      [OldPos,FCompressedStream.Size,FHeaders.Items[FCurrentHeader].CompressedSize,WriteBytes]);
  finally
   if (OutBuf <> nil) then
    FreeMem(OutBuf);
  end;
end; // InternalWriteBlock


//------------------------------------------------------------------------------
// write prepare
//------------------------------------------------------------------------------
procedure TMYLDBCompressedBLOBStream.InternalWritePrepare(Count, Result: Integer);
var
    NumBlocks,NewPos: Int64;
begin
  // calculate start position and current header number for next block
  if (FHeaders.ItemCount = 0) then
   begin
    NewPos := FBLOBDescriptor.StartPosition;
    FCurrentHeader := 0;
   end
  else
   begin
// Commented By Leo Martin - changed from absolute to relative offset
//    NewPos := FHeaders.Items[FCurrentHeader].OffsetToNextHeader;
    NewPos := FHeaders.Positions[FCurrentHeader] +
      FHeaders.Items[FCurrentHeader].OffsetToNextHeader;
    FCurrentHeader := FHeaders.ItemCount;
   end;
  NumBlocks := (Count - Result) div FBlockSize;
  if (((Count - Result) mod FBlockSize) > 0) then
   Inc(NumBlocks);
  FHeaders.SetSize(FHeaders.ItemCount + NumBlocks);
  // set new position
  FCompressedStream.Position := NewPos;
  if (FCompressedStream.Position <> NewPos) then
   raise EMYLDBException.Create(10102,ErrorLCannotSetPosition,
    [NewPos,FCompressedStream.Position,FCompressedStream.Size]);
end; // InternalWritePrepare


//------------------------------------------------------------------------------
// write to compressed stream
//------------------------------------------------------------------------------
function TMYLDBCompressedBLOBStream.Write(const Buffer; Count: Longint): Longint;
var WriteSize:        Integer;
    InBuf,TempBuf:    PChar;
    Offset:           Integer;
begin
 Result := 0;
 if (FCompressionAlgorithm = acaNone) then
  begin
   Result := FCompressedStream.Write(Buffer,Count);
   FUncompressedSize := FCompressedStream.Size - FStartPosition;
   FPosition := FCompressedStream.Position - FStartPosition;
  end // no compression
 else
  if ((Count > 0) and (FPosition >= FUncompressedSize)) then
   begin
    // write beyond end of the file
    if (FPosition > FUncompressedSize) then
      InternalWriteBeyondEOF;
    if (FHeaders.ItemCount > 0) then
     FCurrentHeader := FHeaders.ItemCount-1
    else
     FCurrentHeader := 0;
    Offset := FPosition mod FBlockSize;
    // rewrite last block
    if (Offset > 0) then
     begin
      // load last block
      InBuf := MemoryManager.GetMem(FBlockSize);
      try
        LoadBlock(FCurrentHeader,TempBuf);
        try
         Move(TempBuf^,InBuf^,FHeaders.Items[FCurrentHeader].UncompressedSize);
        finally
         FreeMem(TempBuf);
        end;

        if (Count < (FBlockSize - Offset)) then
         WriteSize := Count
        else
         WriteSize := FBlockSize - Offset;
        Move(PChar(@Buffer)^,PChar(InBuf + Offset)^,WriteSize);
        InternalWriteBlock(InBuf,Offset + WriteSize);
        Inc(Result,WriteSize);
        Inc(FCurrentHeader);
      finally
       MemoryManager.FreeAndNillMem(InBuf);
      end;
     end; // Offset > 0
    InBuf := nil;
    if (Result < Count) then
     begin
      InBuf := MemoryManager.GetMem(FBlockSize);
      if (Offset > 0) and (FCurrentHeader > 0) then
        Dec(FCurrentHeader);
      InternalWritePrepare(Count,Result);
     end; // Result < Count
    try
     while (Result < Count) do
      begin
        if ((Count - Result) < FBlockSize) then
         WriteSize := Count - Result
        else
         WriteSize := FBlockSize;
        Move(PChar(PChar(@Buffer) + Result)^,PChar(InBuf)^,WriteSize);
        FHeaders.Positions[FCurrentHeader] := FCompressedStream.Position;
        InternalWriteBlock(InBuf,WriteSize);
        // write nex block;
        Inc(Result,WriteSize);
        Inc(FCurrentHeader);
      end;
    finally
     if (InBuf <> nil) then
      MemoryManager.FreeAndNillMem(InBuf);
    end;
    Inc(FUncompressedSize,Result);
    Inc(FPosition,Result);
    FBLOBDescriptor.NumBlocks := FHeaders.ItemCount;
   end; // compression
 FBLOBDescriptor.UncompressedSize := FUncompressedSize;
 CalculateRate;
end; // Write


//------------------------------------------------------------------------------
// seek in compressed stream
//------------------------------------------------------------------------------
function TMYLDBCompressedBLOBStream.Seek(Offset: Longint; Origin: Word): Longint;
var NewPosition: Int64;
begin
 NewPosition := FPosition;
 case (Origin) of
  soFromBeginning:
    NewPosition := Offset;
  soFromCurrent:
    NewPosition := Integer(FPosition) + Offset;
  soFromEnd:
    NewPosition := Integer(FUncompressedSize) + Offset;
  end;
 Result := InternalSeek(NewPosition);
end; // Seek


{$IFDEF D6H}
function TMYLDBCompressedBLOBStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64;
var NewPosition: Int64;
begin
 NewPosition := FPosition;
 case (Origin) of
  soBeginning:
    NewPosition := Offset;
  soCurrent:
    NewPosition := Integer(FPosition) + Offset;
  soEnd:
    NewPosition := Integer(FUncompressedSize) + Offset;
  end;
 Result := InternalSeek(NewPosition);
end; // Seek
{$ENDIF}


//------------------------------------------------------------------------------
// compresses buffer
// returns true if successful
// outBuf - pointer to compressed data
// outSize - size of compressed data
//------------------------------------------------------------------------------
function MYLDBInternalCompressBuffer(
                          CompressionAlgorithm:   TMYLDBCompressionAlgorithm;
                          CompressionMode:        Byte;
                          InBuf:                  PChar;
                          InSize:                 Integer;
                          out OutBuf:             PChar;
                          out OutSize:            Integer
                          ): Boolean;
begin
 Result := false;
 OutSize := 0;
 // empty buffer cannot be compressed
 // none compression is not allowed
 if ((CompressionAlgorithm = acaNone) or (InSize = 0)) then Exit;
 Result := true;
 case CompressionAlgorithm of
{$IFDEF ZLIB}
  acaZLIB:
   begin
    try
     ZLIBCompressBuf(InBuf,InSize,Pointer(Outbuf),Integer(OutSize),CompressionMode);
    except
     Result := false;
    end;
    if (OutSize <= 0) then
     Result := false;
   end
{$ENDIF}
{$IFDEF BZIP}
  {$IFDEF ZLIB}
  ;
  {$ENDIF}
  acaBZIP:
   begin
    try
     bzCompressBuf(InBuf,InSize,Pointer(Outbuf),Integer(OutSize),CompressionMode)
    except
     Result := false;
    end;
    if (OutSize <= 0) then
     Result := false;
   end
{$ENDIF}
{$IFDEF PPMD}
  {$IFDEF ZLIB}
  ;
  {$ELSE}
    {$IFDEF ZLIB}
    ;
    {$ENDIF}
  {$ENDIF}
  acaPPM:
   begin
    try
     // some memory reserve for none-compressible data
     OutSize := InSize + InSize div 20 + 50;
     OutBuf := AllocMem(OutSize);
     OutSize := PPMCompressBuffer(
                InBuf,InSize,OutBuf,
                PPM_MO[CompressionMode],
                PPM_SA[CompressionMode]
                );
    except
     Result := false;
    end;
    if (OutSize <= 0) then
     Result := false;
   end
{$ENDIF}
;
  else
   Result := false;
 end; // case compression ?????????
end; // MYLDBInternalCompressBuffer;


//------------------------------------------------------------------------------
// decompresse buffer
// Outsize must be set to uncompressed size
// return true if successful
// OutBuf - pointer to compressed data
// OutSize - size of compressed data
//------------------------------------------------------------------------------
function 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
福利91精品一区二区三区| 成人免费视频网站在线观看| 91亚洲永久精品| 亚洲欧洲日韩女同| 日本电影欧美片| 视频一区二区中文字幕| 日韩欧美专区在线| 国产白丝精品91爽爽久久| 精品国产91乱码一区二区三区| 国产美女久久久久| 日韩理论在线观看| 欧美一区二区三区播放老司机| 国产精品综合网| 一区二区三区日韩欧美| 欧美一级欧美三级在线观看| 成人丝袜视频网| 一区二区三区免费网站| 亚洲成人av一区| 91.麻豆视频| 成人免费视频视频在线观看免费| 一区二区三区**美女毛片| 制服丝袜成人动漫| 日本高清成人免费播放| 国产成人在线影院| 久久爱www久久做| 婷婷丁香久久五月婷婷| 国产精品国产三级国产普通话三级 | 一区二区三区毛片| 亚洲国产精品成人综合| 日韩免费一区二区三区在线播放| 91视视频在线观看入口直接观看www | 欧美日韩精品久久久| 成年人网站91| 91天堂素人约啪| 一道本成人在线| 欧美色综合久久| 91小宝寻花一区二区三区| 99免费精品在线观看| 播五月开心婷婷综合| kk眼镜猥琐国模调教系列一区二区| 国产一区美女在线| 岛国一区二区在线观看| 91在线观看污| 在线视频欧美精品| 日韩三级精品电影久久久| 欧美视频一区二区三区四区| 一本大道久久精品懂色aⅴ| 91丨九色丨蝌蚪富婆spa| 欧美色图第一页| 国产午夜精品一区二区| 国产人久久人人人人爽| 亚洲欧美日本韩国| 蜜臀99久久精品久久久久久软件 | 国产精品一级在线| 日本道免费精品一区二区三区| 欧美视频日韩视频在线观看| 久久久久国产精品麻豆| 自拍偷在线精品自拍偷无码专区| 亚洲永久精品国产| 国内外精品视频| 91国内精品野花午夜精品| 久久久不卡网国产精品二区 | 日韩精品一区第一页| 国产伦精品一区二区三区视频青涩| 国产成人久久精品77777最新版本| 波多野结衣欧美| 久久亚洲精华国产精华液| 亚洲高清三级视频| www.成人网.com| 国产精品国产三级国产aⅴ入口| 日韩高清电影一区| 色999日韩国产欧美一区二区| 91精品国产乱码| 亚洲最大成人网4388xx| 国产成人免费在线| 欧美不卡123| 激情综合网av| 精品久久久三级丝袜| 黄页视频在线91| 久久久精品综合| 国产很黄免费观看久久| 久久久青草青青国产亚洲免观| 麻豆久久久久久久| 日韩美女在线视频 | 不卡视频免费播放| 国产欧美一区在线| 91视频国产观看| 亚洲chinese男男1069| 日韩亚洲欧美一区二区三区| 麻豆国产一区二区| 18涩涩午夜精品.www| 欧美在线高清视频| 免费日韩伦理电影| 一区二区三区在线不卡| 欧美日本视频在线| 国产精品一区二区在线看| 亚洲免费资源在线播放| 91精品久久久久久久91蜜桃| 国产激情偷乱视频一区二区三区| 国产精品三级电影| 91精品国产综合久久精品麻豆| 国产酒店精品激情| 日韩精彩视频在线观看| 亚洲男人的天堂在线aⅴ视频| 欧美精品在线观看播放| 色一情一伦一子一伦一区| 久久成人免费网| 日韩av电影免费观看高清完整版| 国产精品三级av| 国产午夜精品一区二区三区视频 | 国产亚洲精品aa| 欧美精品粉嫩高潮一区二区| av男人天堂一区| 国产美女视频91| 久久99精品国产.久久久久| 三级在线观看一区二区| 亚洲国产视频在线| 亚洲精品免费在线播放| 亚洲欧美一区二区三区久本道91| 国产午夜亚洲精品理论片色戒| 欧美日韩一区在线观看| 欧美一区二区在线观看| 欧美精品免费视频| 精品va天堂亚洲国产| 精品国产一区二区三区久久久蜜月| 欧美丰满嫩嫩电影| 艳妇臀荡乳欲伦亚洲一区| 中文在线资源观看网站视频免费不卡| 日韩欧美一二三区| 国产日韩欧美麻豆| 中文字幕综合网| 偷窥少妇高潮呻吟av久久免费| 亚洲国产你懂的| 国产成人啪午夜精品网站男同| 成人激情动漫在线观看| 在线免费不卡电影| 精品播放一区二区| 亚洲精品视频在线看| 秋霞国产午夜精品免费视频| 福利电影一区二区| 在线观看日韩高清av| 日韩一区二区高清| 一区二区三区av电影 | 亚洲少妇中出一区| 激情文学综合丁香| 91天堂素人约啪| 一区二区欧美视频| 日韩欧美一区二区不卡| 欧美亚洲动漫另类| 亚洲国产精品传媒在线观看| 亚洲午夜久久久久久久久久久 | 亚洲精品免费在线观看| 黑人巨大精品欧美一区| 欧美日韩不卡视频| 亚洲一区影音先锋| 色域天天综合网| 国产精品国产三级国产普通话蜜臀| 蜜臀av性久久久久蜜臀aⅴ流畅 | 欧美性猛交xxxxxx富婆| 中文字幕在线不卡一区二区三区| 狠狠色丁香九九婷婷综合五月| 欧美人牲a欧美精品| 秋霞电影一区二区| 欧美精品一区二区在线播放| 麻豆精品视频在线观看视频| 欧美日韩和欧美的一区二区| 午夜在线成人av| 日韩一区二区影院| 国产乱码精品一品二品| 久久精品一区蜜桃臀影院| av动漫一区二区| 中文字幕视频一区| 91精品蜜臀在线一区尤物| 日本午夜精品一区二区三区电影| 欧美一区二区三区色| 蜜臀av一区二区| 国产精品久久久久久久裸模| 91原创在线视频| 麻豆国产欧美日韩综合精品二区| 久久久亚洲精品石原莉奈| 91蝌蚪porny成人天涯| 日产欧产美韩系列久久99| 久久综合九色欧美综合狠狠| 韩国成人在线视频| 有码一区二区三区| 亚洲精品一区二区三区99| 91性感美女视频| 国产激情一区二区三区桃花岛亚洲| 亚洲欧美激情小说另类| 欧美精品成人一区二区三区四区| 韩国精品在线观看| 亚洲18女电影在线观看| 一区在线观看免费| 久久九九影视网| 久久久国产精品不卡| 日韩一区二区精品| 精品少妇一区二区三区| 日韩欧美亚洲国产另类| 欧美精品丝袜中出| 91精品国产色综合久久ai换脸|