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

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

?? myldbcompression.pas

?? 一個本地database引擎,支持中文T_Sql查詢,兼容DELPHI標準數據庫控件
?? PAS
?? 第 1 頁 / 共 5 頁
字號:
end; // InternalCreate


//------------------------------------------------------------------------------
// load  block headers
//------------------------------------------------------------------------------
procedure TMYLDBCompressedBLOBStream.LoadHeaders;
var CHeader:    TMYLDBCompressedStreamBlockHeader;
    Pos,NewPos: Int64;
    i,OldPos:   Int64;
begin
 FCompressedSize := 0;
 FUncompressedSize := 0;
 // always restore StartPosition as blob stream can be stored at the middle of the file
 if (FCompressedStream.Position <> FBLOBDescriptor.StartPosition) then
  raise EMYLDBException.Create(10080,ErrorLCannotSetPosition,
    [FBLOBDescriptor.StartPosition,FCompressedStream.Position,
     FCompressedStream.Size]);
 FHeaders.SetSize(0);

 i := 0;
 while (i < FBLOBDescriptor.NumBlocks) do
  begin
   // store position of the current block
   Pos := FCompressedStream.Position;
   // check if we can read block header from current position
   if (
       (FCompressedStream.Size - FCompressedStream.Position) <
       sizeof(TMYLDBCompressedStreamBlockHeader)
      ) then
    begin
     // stream too small
     if (FRepair) then
      begin
       // cut compressed file (end of file was cut)
       // repair this error
       FBLOBDescriptor.NumBlocks := i;
       FHeaders.SetSize(i);
       break;
      end
     else
      raise EMYLDBException.Create(10082,ErrorLStreamSizeTooSmall,
        [FCompressedStream.Size,
        FCompressedStream.Position + sizeof(TMYLDBCompressedStreamBlockHeader)]);
    end; // check if we can read block header from current position
   FCompressedStream.ReadBuffer(CHeader,sizeof(TMYLDBCompressedStreamBlockHeader));
   Inc(FUncompressedSize,CHeader.UncompressedSize);
   Inc(FCompressedSize,CHeader.CompressedSize);
   FHeaders.AppendItem(CHeader,Pos);
// Commented By Leo Martin - changed from absolute to relative offset
//   NewPos := CHeader.OffsetToNextHeader;
   NewPos := Pos + CHeader.OffsetToNextHeader;
   OldPos := FCompressedStream.Position;
   FCompressedStream.Position := NewPos;
   if (FCompressedStream.Position <> NewPos) then
    raise EMYLDBException.Create(10083,ErrorLCannotSetPosition,
      [NewPos,OldPos,FCompressedStream.Size]);
   Inc(i);
  end; //  while (i < FBLOBDescriptor.NumBlocks)
end; // LoadHeaders


//------------------------------------------------------------------------------
// prepare buffer for writing
//------------------------------------------------------------------------------
procedure TMYLDBCompressedBLOBStream.PrepareBufferForWriting
                                     (
                                      InBuf:        PChar;
                                      InSize:       Integer;
                                      var OutBuf:   PChar;
                                      var Header:   TMYLDBCompressedStreamBlockHeader
                                     );
begin
  OutBuf := nil;
  Header.UncompressedSize := inSize;
  Header.Crc32 := CRC32(0,InBuf,InSize);
  if (not MYLDBInternalCompressBuffer(FCompressionAlgorithm,FCompressionMode,
          InBuf,InSize,OutBuf,Header.CompressedSize)) then
   begin
    if (OutBuf <> nil) then
     FreeMem(OutBuf);
    raise EMYLDBException.Create(10085,ErrorLCompressBufferFailed,
      [Byte(FCompressionAlgorithm),FCompressionMode,InSize,Header.CompressedSize]);
   end;
end; //PrepareBuffer;


//------------------------------------------------------------------------------
// load block from file, decompress it and checks crc
//------------------------------------------------------------------------------
procedure TMYLDBCompressedBLOBStream.LoadBlock(
                                      CurHeader:  Int64;
                                      var OutBuf: PChar
                                            );

var UncompSize,CompSize:  Integer;
    BytesRead:            Integer;
    CheckSum:             LongWord;
    InBuf:                PChar;
begin
  CompSize := FHeaders.Items[curHeader].CompressedSize;
  InBuf := MemoryManager.GetMem(CompSize);
  try
   FCompressedStream.Position := FHeaders.Positions[CurHeader] +
    sizeof(TMYLDBCompressedStreamBlockHeader);

   BytesRead := FCompressedStream.Read(InBuf^,CompSize);
   if (BytesRead <> CompSize) then
    begin
     raise EMYLDBException.Create(10086,ErrorLCannotReadFromStream,
      [FHeaders.Positions[CurHeader] + sizeof(TMYLDBCompressedStreamBlockHeader),
      FCompressedStream.Size,CompSize,BytesRead]);
    end;

   UncompSize := FHeaders.Items[CurHeader].UncompressedSize;
   if (not MYLDBInternalDecompressBuffer(FCompressionalgorithm,
           InBuf,CompSize,OutBuf,UncompSize)) then
    begin
     // decompression error
     raise EMYLDBException.Create(10087,ErrorLDecompressBufferFailed,
      [Byte(FCompressionAlgorithm),CompSize,UncompSize]);
    end;
   if (FHeaders.Items[CurHeader].UncompressedSize <> UncompSize) then
    begin
     FreeMem(outBuf);
     OutBuf := nil;
     raise EMYLDBException.Create(10088,ErrorLDecompressBufferFailedInvalidSize,
      [UncompSize,FHeaders.Items[CurHeader].UncompressedSize]);
    end;
   // check crc
   CheckSum := CRC32(0,OutBuf,UncompSize);
   if (FHeaders.Items[CurHeader].Crc32 <> CheckSum) then
    begin
    // decompression crc error
     FreeMem(outBuf);
     OutBuf := nil;
     raise EMYLDBException.Create(10089,ErrorLDecompressBufferFailedInvalidCRC,
      [CheckSum,FHeaders.Items[CurHeader].Crc32]);
    end;
  finally
   MemoryManager.FreeAndNillMem(inBuf);
  end;
end; // LoadBlock


//------------------------------------------------------------------------------
// set size of compressed stream
//------------------------------------------------------------------------------
procedure TMYLDBCompressedBLOBStream.InternalIncreaseSize(NewSize: Int64);
var Buf:                  PChar;
    ExtensionSize,Count:  Int64;
    OldPos:               Int64;
    WriteBytes,WriteSize: Integer;
begin
 Position := FUncompressedSize;
 ExtensionSize := NewSize - FUncompressedSize;
 if (ExtensionSize <= 0) then
  raise EMYLDBException.Create(10098,ErrorLInvalidExtensionSize,
    [NewSize,FUncompressedSize,ExtensionSize]);
 Buf := MemoryManager.AllocMem(FBlockSize);
 try
  Count := 0;
  while (Count < ExtensionSize) do
   begin
    if ((ExtensionSize - Count) < FBlockSize) then
     WriteSize := ExtensionSize - Count
    else
     WriteSize := FBlockSize;
    OldPos := Self.Position;
    // write empty block
    WriteBytes := Self.Write(Buf^,WriteSize);
    if (WriteBytes <> WriteSize) then
      raise EMYLDBException.Create(10097,ErrorLCannotWriteToStream,
        [OldPos,Self.Size,WriteSize,WriteBytes]);
    Inc(Count,WriteSize);
   end; // while
 finally
  MemoryManager.FreeAndNillMem(Buf);
 end;
end; // InternalIncreaseSize


//------------------------------------------------------------------------------
// set size of compressed stream
//------------------------------------------------------------------------------
procedure TMYLDBCompressedBLOBStream.InternalDecreaseSize(NewSize: Int64);
var Buf,OutBuf:           PChar;
    ExtensionSize,OldPos: Int64;
    CurHdr,NumBlocks:     Int64;
    BytesWrite:           Integer;
begin
  CurHdr := NewSize div FBlockSize;
  NumBlocks := CurHdr;
  ExtensionSize := NewSize mod FBlockSize;
  OutBuf := nil;
  Buf := nil;
  try
    if (ExtensionSize > 0) then
     begin
      Inc(NumBlocks);
      LoadBlock(CurHdr,Buf);
      try
       PrepareBufferForWriting(Buf,ExtensionSize,OutBuf,FHeaders.Items[CurHdr]);
      finally
       if (Buf <> nil) then
        MemoryManager.FreeAndNillMem(Buf);
      end;
     end;
    FBLOBDescriptor.NumBlocks := NumBlocks;
    FHeaders.SetSize(NumBlocks);
    if (ExtensionSize > 0) then
     begin
      FCompressedStream.Size := FHeaders.Positions[CurHdr];
      if (FCompressedStream.Size <> FHeaders.Positions[CurHdr]) then
       raise EMYLDBException.Create(10093,ErrorLInvalidStreamSize,
        [FCompressedStream.Size,FHeaders.Positions[CurHdr]]);
      FCompressedStream.Position := FCompressedStream.Size;
      if (FCompressedStream.Position <> FCompressedStream.Size) then
       raise EMYLDBException.Create(10094,ErrorLCannotSetPosition,
        [FCompressedStream.Size,FCompressedStream.Position,
         FCompressedStream.Size]);
      FHeaders.Items[CurHdr].OffsetToNextHeader := FCompressedStream.Position +
        Int64(FHeaders.Items[CurHdr].CompressedSize) +
        sizeof(TMYLDBCompressedStreamBlockHeader);
      FHeaders.Positions[CurHdr] := FCompressedStream.Position;
      OldPos := FCompressedStream.Position;
      BytesWrite := FCompressedStream.Write(FHeaders.Items[curHdr],
          sizeof(TMYLDBCompressedStreamBlockHeader));
      if (BytesWrite <> sizeof(TMYLDBCompressedStreamBlockHeader)) then
       raise EMYLDBException.Create(10095,ErrorLWriteToStream,
        [OldPos,FCompressedStream.Size,sizeof(TMYLDBCompressedStreamBlockHeader),BytesWrite]);
      OldPos := FCompressedStream.Position;
      BytesWrite := FCompressedStream.Write(OutBuf^,FHeaders.Items[CurHdr].CompressedSize);
      if (BytesWrite <> sizeof(TMYLDBCompressedStreamBlockHeader)) then
       raise EMYLDBException.Create(10096,ErrorLWriteToStream,
        [OldPos,FCompressedStream.Size,sizeof(TMYLDBCompressedStreamBlockHeader),BytesWrite]);
     end;
  finally
   if (OutBuf <> nil) then
    MemoryManager.FreeAndNillMem(OutBuf);
  end;
end; // InternalDecreaseSize


//------------------------------------------------------------------------------
// set size of compressed stream
//------------------------------------------------------------------------------
procedure TMYLDBCompressedBLOBStream.InternalSetSize(NewSize: Int64);
begin
 if (FCompressionAlgorithm = acaNone) then
  begin
   FCompressedStream.Size := FStartPosition + NewSize;
  end
 else
 if (NewSize > FUncompressedSize) then
  begin
    // go to last block
    InternalIncreaseSize(NewSize);
  end // NewSize > FUncompressedSize
 else
 if (NewSize < FUncompressedSize) then
  begin
    InternalDecreaseSize(NewSize);
  end; // NewSize < FUncompressedSize
 FUncompressedSize := NewSize;
 FBLOBDescriptor.UncompressedSize := NewSize;
 CalculateRate;
 if (FPosition > FUncompressedSize) then
  Position := FUncompressedSize;
end; // InternalSetSize


//------------------------------------------------------------------------------
// internal seek
//------------------------------------------------------------------------------
function TMYLDBCompressedBLOBStream.InternalSeek(NewPosition: Int64): Int64;
begin
 if (FCompressionAlgorithm = acaNone) then
  begin
   FCompressedStream.Position := FStartPosition + NewPosition;
   Result := FCompressedStream.Position - FStartPosition;
   FPosition := Result;
  end // no compression
 else
  begin
   // compression
   FPosition := NewPosition;
   if (FPosition <= 0) then
    begin
     FPosition := 0;
     FCurrentHeader := 0;
    end
   else
    begin
     if (FUncompressedSize = 0) then
      FCurrentHeader := 0
     else
      FCurrentHeader := FHeaders.FindPosition(FPosition);
    end;
   Result := FPosition;
  end; // compression
end; // InternalSeek


//------------------------------------------------------------------------------
// set size of compressed stream
//------------------------------------------------------------------------------
procedure TMYLDBCompressedBLOBStream.SetSize(NewSize: Longint);
begin
 InternalSetSize(NewSize);
end; // SetSize


//------------------------------------------------------------------------------
// set size of compressed stream
//------------------------------------------------------------------------------
{$IFDEF D6H}
procedure TMYLDBCompressedBLOBStream.SetSize(const NewSize: Int64);
begin
 InternalSetSize(NewSize);
end; // SetSize
{$ENDIF}


//------------------------------------------------------------------------------
// gets compressed size
//------------------------------------------------------------------------------
function TMYLDBCompressedBLOBStream.GetCompressedSize: Int64;
begin
 Result := FCompressedStream.Size;
end; // GetCompressedSize


//------------------------------------------------------------------------------
// returns compression rate (100.0 if there is no compression)
//------------------------------------------------------------------------------
function TMYLDBCompressedBLOBStream.GetCompressionRate: Double;
begin
 CalculateRate;
 Result := FCompressionRate;
end; // GetCompressionRate


//------------------------------------------------------------------------------
// Create
//------------------------------------------------------------------------------
constructor TMYLDBCompressedBLOBStream.Create(
						           Stream:                TStream;
                       BLOBDescriptor:        TMYLDBBLOBDescriptor;
                       ToCreate:              Boolean = false;
                       ToRepair:              Boolean = false
                      );
begin
 FCompressedStream := Stream;
 FHeaders := nil;
 FRepair := ToRepair;
 FBLOBDescriptor := BLOBDescriptor;
 FCompressionAlgorithm := TMYLDBCompressionAlgorithm(
    FBLOBDescriptor.CompressionAlgorithm);
 FCompressionMode := FBLOBDescriptor.CompressionMode;
 FCompressedStream.Position := FBLOBDescriptor.StartPosition;
 if (FCompressedStream.Position <> FBLOBDescriptor.StartPosition) then
  raise EMYLDBException.Create(10103,ErrorLCannotSetPosition,
    [FBLOBDescriptor.StartPosition,FCompressedStream.Position,
    FCompressedStream.Size]);
 FBlockSize := BLOBDescriptor.BlockSize;
 FStartPosition := BLOBDescriptor.StartPosition;
 if (FCompressionAlgorithm = acaNone) then
  begin
   // no compression
   // try to set start position in source "compressed" stream
   if (FCompressedStream.Position <> FBLOBDescriptor.StartPosition) then
    raise EMYLDBException.Create(10079,ErrorLCannotSetPosition,
      [FBLOBDescriptor.StartPosition,FCompressedStream.Position,
       FCompressedStream.Size]);
   // default block size
   if (ToCreate) then
    begin
     // create new stream
     FCompressedSize := 0;
     FUncompressedSize := 0;
    end
   else
    begin
     // open existing stream
     FUncompressedSize := FBLOBDescriptor.UncompressedSize;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产69精品久久99不卡| 久久99精品一区二区三区三区| 4438x亚洲最大成人网| 中文字幕一区在线观看| 亚洲色图视频网| 久久久久成人黄色影片| 激情五月婷婷综合网| 性感美女久久精品| www.亚洲色图.com| 国产精品乱人伦| 一区二区视频免费在线观看| 色先锋久久av资源部| 成人不卡免费av| caoporn国产精品| 99热精品国产| 在线一区二区三区| 欧美亚洲自拍偷拍| 欧美日韩成人高清| 日韩美女天天操| 国产午夜精品在线观看| 国产精品福利电影一区二区三区四区 | 蜜臀精品一区二区三区在线观看 | 一区精品在线播放| 一区二区三区四区激情| 亚洲1区2区3区视频| 美女视频黄 久久| 国产福利精品一区| 成人免费va视频| 在线精品视频一区二区| 91精品国产欧美一区二区| 精品日韩在线观看| 国产精品福利av| 亚洲午夜电影在线观看| 久久99国产精品久久99果冻传媒| 国产寡妇亲子伦一区二区| 91在线观看地址| 欧美剧情电影在线观看完整版免费励志电影 | 91精品久久久久久久99蜜桃| 精品久久一区二区三区| 国产精品午夜春色av| 亚洲午夜在线视频| 狠狠色综合日日| 91麻豆福利精品推荐| 中文字幕一区在线观看视频| 天天亚洲美女在线视频| 国产一区在线看| 欧美在线免费观看亚洲| 2014亚洲片线观看视频免费| 亚洲精品国产视频| 麻豆国产一区二区| 91麻豆自制传媒国产之光| 日韩一区二区在线观看视频| 最近中文字幕一区二区三区| 日日夜夜精品视频天天综合网| 国产乱人伦精品一区二区在线观看 | 一级精品视频在线观看宜春院| 男女男精品视频| 成人av资源网站| 日韩欧美久久一区| 亚洲精品一二三区| 国产美女娇喘av呻吟久久| 欧美影视一区二区三区| 久久一夜天堂av一区二区三区| 亚洲在线中文字幕| 懂色av一区二区三区免费看| 884aa四虎影成人精品一区| 国产精品免费视频一区| 久久99精品久久久久久动态图 | 国产成人h网站| 这里只有精品视频在线观看| 国产精品福利一区二区三区| 狠狠色狠狠色综合| 欧美日本一区二区三区四区| 亚洲女人****多毛耸耸8| 国产自产高清不卡| 欧美一级欧美一级在线播放| 一区二区三区国产精华| thepron国产精品| 久久亚洲免费视频| 美女尤物国产一区| 欧美日韩免费高清一区色橹橹| 国产精品久久久久久久浪潮网站| 免费成人av在线| 欧美三级乱人伦电影| 最近中文字幕一区二区三区| 国产**成人网毛片九色 | 欧美三级中文字幕在线观看| 亚洲欧洲成人精品av97| 粉嫩av一区二区三区| 久久综合资源网| 久久国产生活片100| 337p亚洲精品色噜噜噜| 性欧美疯狂xxxxbbbb| 欧美熟乱第一页| 亚洲激情av在线| 91污片在线观看| 欧美韩国日本一区| 成人永久看片免费视频天堂| 国产亚洲欧美一区在线观看| 久久爱www久久做| 精品欧美一区二区三区精品久久| 亚洲一区二区三区四区五区中文| 国产欧美综合色| 色香蕉成人二区免费| 五月婷婷综合激情| 欧美午夜电影一区| 国产成人久久精品77777最新版本| 精品国产免费人成电影在线观看四季| 一本色道久久综合精品竹菊| 亚洲一区二区三区四区不卡| 91蜜桃传媒精品久久久一区二区| 日本免费在线视频不卡一不卡二| 日本aⅴ免费视频一区二区三区| 色综合久久六月婷婷中文字幕| 国产精品免费看片| 成人av电影免费在线播放| 国产精品传媒在线| 日韩国产高清在线| 国产欧美一区二区精品性 | 欧美一级久久久久久久大片| 亚洲mv在线观看| 欧美精品久久99久久在免费线| 日韩和欧美一区二区三区| 日韩欧美国产小视频| 国产一区二区三区香蕉 | 韩国v欧美v亚洲v日本v| 色菇凉天天综合网| 亚洲已满18点击进入久久| av激情综合网| 综合欧美一区二区三区| 欧美在线999| 亚洲va欧美va天堂v国产综合| 欧美亚洲动漫制服丝袜| 国产精品蜜臀av| 97久久精品人人爽人人爽蜜臀| 亚洲午夜久久久久| 欧美夫妻性生活| 久久97超碰色| 久久精品人人做人人综合| voyeur盗摄精品| 亚洲综合视频网| 日韩一区二区精品葵司在线| 日本伊人色综合网| 日韩精品一区二区在线| 成人网页在线观看| 亚洲免费av高清| 欧美男生操女生| 国产一区二区三区综合| 亚洲美女视频在线| 成人听书哪个软件好| 亚洲欧美日韩一区二区三区在线观看 | 99在线视频精品| 亚洲国产日韩一区二区| 日韩欧美电影在线| 99久久伊人网影院| 国产精品不卡在线观看| 欧美一区二区日韩| 91捆绑美女网站| 日韩精品久久久久久| 国产精品伦一区二区三级视频| 日本道精品一区二区三区| 国内偷窥港台综合视频在线播放| 欧美激情综合五月色丁香小说| 色先锋资源久久综合| 国产精品69毛片高清亚洲| 亚洲欧美精品午睡沙发| 精品国产污污免费网站入口| 国产盗摄女厕一区二区三区| 天天综合网天天综合色| 成人久久视频在线观看| 午夜精品影院在线观看| 国产精品无人区| 欧美嫩在线观看| 91色porny| 麻豆国产精品官网| 亚洲午夜久久久久中文字幕久| 亚洲国产精品黑人久久久| 91精品中文字幕一区二区三区| 色噜噜狠狠一区二区三区果冻| 老汉av免费一区二区三区| 亚洲成人午夜电影| 久久久久久久网| 欧美精品久久久久久久多人混战 | 国产真实乱偷精品视频免| 国产免费成人在线视频| 制服.丝袜.亚洲.中文.综合| 国产精品99久久不卡二区| 日韩不卡在线观看日韩不卡视频| 亚洲美女免费在线| 久久久精品日韩欧美| 欧美mv和日韩mv的网站| 欧洲一区在线电影| 色欧美片视频在线观看在线视频| 男女男精品视频网| 亚洲国产综合视频在线观看| 一区二区免费视频| 中文字幕va一区二区三区| 久久蜜臀中文字幕| 欧洲日韩一区二区三区| 91色|porny|