ViewVC Help
View File | Revision Log | View Changeset | Root Listing
root/Oni2/oup/current/Helper/LevelDB.pas
(Generate patch)

Comparing oup/current/Helper/LevelDB.pas (file contents):
Revision 141 by alloc, Fri Mar 30 01:16:54 2007 UTC vs.
Revision 152 by alloc, Sun Apr 1 18:38:11 2007 UTC

# Line 44 | Line 44 | end;
44  
45  
46   procedure TForm_LevelDB.CreateLevel(Source, Target: String);
47 + const
48 +  EmptyBytes: Array[0..31] of Byte = (
49 +      0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 );
50   var
51    DatHeader:        THeader;
52    FilesHeader:      TFilesMap;
# Line 74 | Line 77 | var
77    RawLinks:   TRawDataList;
78  
79    DatFileStream, RawFileStream: TMemoryStream;
77
78 // ###########################
79  datsum, linksum, rawsum: Int64;
80  freq: Int64;
81  tempticks1, tempticks2: Int64;
82 // ###########################
80   const
81    Steps: Byte = 3;
82  
# Line 297 | Line 294 | begin
294    lbl_estimation.Caption := 'Estimated finishing time: unknown';
295    Application.ProcessMessages;
296  
300  QueryPerformanceFrequency(freq);
301  datsum := 0;
302  linksum := 0;
303  rawsum := 0;
304
297    FileTime := Time;
298    for FileID := 0 to DatHeader.Files - 1 do
299    begin
# Line 310 | Line 302 | begin
302        FilesHeader[FileID].Extension[j] := FileInfo.Extension[4 - j];
303      if FileInfo.Size > 0 then
304      begin
313      QueryPerformanceCounter(tempticks1);
314
305        FilesHeader[FileID].DataAddr := Stream_Body.Size + 8;
306        DatFileStream := TMemoryStream.Create;
307        Connection.LoadDatFile(FileID, TStream(DatFileStream));
# Line 320 | Line 310 | begin
310        DatFileStream.Write(tempi, 4);
311        DatFileStream.Write(LevelID, 4);
312  
323      QueryPerformanceCounter(tempticks2);
324      datsum := datsum + (tempticks2 - tempticks1);
325
313        DatLinks := Connection.GetDatLinks(FileID);
314        if Length(DatLinks) > 0 then
315        begin
# Line 337 | Line 324 | begin
324          end;
325        end;
326  
340      QueryPerformanceCounter(tempticks1);
341      linksum := linksum + (tempticks1 - tempticks2);
342
327        RawLinks := Connection.GetRawList(FileID);
328        if Length(RawLinks) > 0 then
329        begin
# Line 354 | Line 338 | begin
338              begin
339                RawLinks[i].RawAddr := Stream_Sep.Size;
340                Stream_sep.CopyFrom(RawFileStream, RawFileStream.Size);
341 +              if (Stream_Sep.Size mod 32) > 0 then
342 +                Stream_Sep.Write(EmptyBytes[0], 32 - (Stream_Sep.Size mod 32));
343              end else begin
344                RawLinks[i].RawAddr := Stream_Raw.Size;
345                Stream_Raw.CopyFrom(RawFileStream, RawFileStream.Size);
346 +              if (Stream_Raw.Size mod 32) > 0 then
347 +                Stream_Raw.Write(EmptyBytes[0], 32 - (Stream_Raw.Size mod 32));
348              end;
349            end else
350              RawLinks[i].RawAddr := 0;
# Line 366 | Line 354 | begin
354        end;
355        DatFileStream.Seek(0, soFromBeginning);
356        Stream_Body.CopyFrom(DatFileStream, DatFileStream.Size);
357 <
358 <      QueryPerformanceCounter(tempticks2);
359 <      rawsum := rawsum + (tempticks2 - tempticks1);
357 >      if (Stream_Body.Size mod 32) > 0 then
358 >      begin
359 >        ShowMessage(
360 >            IntToStr(FileID) + '-' + FileInfo.Name + '.' + FileInfo.Extension + #13#10 +
361 >            IntToStr(FileInfo.Size) + ' - 0x' + IntToHex(FileInfo.Size, 6) + ' - real: ' + IntToStr(DatFileStream.Size) + ' - 0x' + IntToHex(DatFileStream.Size, 6) + #13#10 +
362 >            IntToStr(Stream_Body.Size) + ' - 0x' + IntToHex(Stream_Body.Size, 6) );
363 >        Stream_Body.Write(EmptyBytes[0], 32 - (Stream_Body.Size mod 32));
364 >      end;
365      end
366      else
367        FilesHeader[FileID].DataAddr := 0;
# Line 391 | Line 384 | begin
384      Application.ProcessMessages;
385    end;
386  
394  ShowMessage('AvgDats: ' + FloatToStr((datsum / progress.Max) / freq) + #13#10 +
395      'AvgLinks: ' + FloatToStr((linksum / progress.Max) / freq) + #13#10 +
396      'AvgRaws: ' + FloatToStr((rawsum / progress.Max) / freq)
397   );
398
387    Stream_Dat.Write(DatHeader, SizeOf(DatHeader));
388    for i := 0 to High(FilesHeader) do
389      Stream_Dat.Write(FilesHeader[i], SizeOf(FilesHeader[i]));
# Line 404 | Line 392 | begin
392    for i := 0 to High(ExtensionsHeader) do
393      Stream_Dat.Write(ExtensionsHeader[i], SizeOf(ExtensionsHeader[i]));
394  
395 +  if (Stream_Dat.Size mod 32) > 0 then
396 +    Stream_Dat.Write(EmptyBytes[0], 32 - (Stream_Dat.Size mod 32));
397 +
398    DatHeader.DataSize  := Stream_Body.Size;
399    DatHeader.NamesSize := Stream_Names.Size;
400    DatHeader.DataAddr  := Stream_Dat.Size;
401  
402    Stream_Body.Seek(0, soFromBeginning);
403    Stream_Dat.CopyFrom(Stream_Body, Stream_Body.Size);
404 +
405 +  if (Stream_Dat.Size mod 32) > 0 then
406 +    Stream_Dat.Write(EmptyBytes[0], 32 - (Stream_Dat.Size mod 32));
407 +
408    DatHeader.NamesAddr := Stream_Dat.Size;
409    Stream_Names.Seek(0, soFromBeginning);
410    Stream_Dat.CopyFrom(Stream_Names, Stream_Names.Size);
# Line 450 | Line 445 | var
445  
446    BeginTime, FileTime: Double;
447    Step:       Integer;
453  LevelID:    Integer;
448    TimeFormat: TFormatSettings;
449  
450    ConID:      Integer;
# Line 459 | Line 453 | var
453  
454    FileID:     Integer;
455  
462  Strings:    TStrings;
456    i:          Integer;
457    temps:      String;
465  tempi:      Integer;
466  tempb:      Byte;
458    tempdata:   TByteData;
459    FileInfo:   TFileInfo;
460    DatLinks:   TDatLinkList;
# Line 635 | Line 626 | begin
626    DoStep('Writing .dat-fileslist');
627    Application.ProcessMessages;
628  
629 +  FileTime := Time;
630    Database.StartTransaction;
631    for FileID := 0 to Connection.GetFileCount - 1 do
632    begin
# Line 709 | Line 701 | begin
701      end;
702      if ((FileID mod 10) = 0) and (FileID >= 100) then
703        lbl_estimation.Caption := 'Estimated time left: ' + TimeToStr(
704 <        (Time - BeginTime) / FileID * (progress.Max - FileID + 1) * 1.1, timeformat );
704 >        (Time - FileTime) / FileID * (progress.Max - FileID + 1) * 1.1, timeformat );
705      progress.Position := FileID;
706      lbl_progress.Caption := 'Files done: ' + IntToStr(FileID) + '/' + IntToStr(progress.Max);
707      Application.ProcessMessages;

Diff Legend

Removed lines
+ Added lines
< Changed lines (old)
> Changed lines (new)