@@ -24,8 +24,8 @@ TGenerator = class(TObject)
2424 FStationNames: TStringList;
2525
2626 procedure BuildStationNames ;
27- function GenerateProgressBar (APBPosition, APBMax, APBWIdth, AFileSize: Int64 ;
28- ATimeElapsed: TDateTime): String;
27+ function GenerateProgressBar (APBPosition, APBMax, APBWIdth: Integer ;
28+ AFileSize: Int64; ATimeElapsed: TDateTime): String;
2929 function Rng1brc (Range: longint): longint;
3030 protected
3131 public
@@ -37,7 +37,7 @@ TGenerator = class(TObject)
3737 end ;
3838
3939 { $IFNDEF FPC}
40- TStringArray = array of string ;
40+ TStringArray = array of Utf8String ;
4141 TWriteBufStream = TFileStream;
4242 { $ENDIF}
4343
@@ -48,7 +48,8 @@ implementation
4848{ $IFDEF FPC}
4949, streamex
5050{ $ELSE}
51- , System.Diagnostics
51+ , System.Diagnostics
52+ { $IF defined(MSWINDOWS)} , Winapi.Windows{ $ENDIF}
5253{ $ENDIF}
5354;
5455
@@ -113,7 +114,7 @@ procedure TGenerator.BuildStationNames;
113114 end ;
114115 stop := GetTickCount64;
115116 { $ELSE}
116- start := TStopwatch.GetTimeStamp;
117+ start := { $IF defined(MSWINDOWS) } GetTickCount64 { $ELSE } TStopwatch.GetTimeStamp{ $ENDIF } ;
117118 while not streamReader.EndOfStream do
118119 begin
119120 entry := streamReader.ReadLine;
@@ -124,7 +125,7 @@ procedure TGenerator.BuildStationNames;
124125 Inc(count);
125126 end ;
126127 end ;
127- stop := TStopwatch.GetTimeStamp;
128+ stop := { $IF defined(MSWINDOWS) } GetTickCount64 { $ELSE } TStopwatch.GetTimeStamp{ $ENDIF } ;
128129 { $ENDIF}
129130 finally
130131 streamReader.Free;
@@ -143,14 +144,13 @@ procedure TGenerator.BuildStationNames;
143144 WriteLn;
144145end ;
145146
146- function TGenerator.GenerateProgressBar (APBPosition, APBMax, APBWIdth, AFileSize: Int64;
147- ATimeElapsed: TDateTime): String;
147+ function TGenerator.GenerateProgressBar (APBPosition, APBMax, APBWIdth: Integer; AFileSize: Int64; ATimeElapsed: TDateTime): String;
148148var
149149 percentDone: Double;
150150 filled: Integer;
151151begin
152- percentDone := ( 100 * APBPosition) / APBMax;
153- filled := (APBWIdth * APBPosition) div APBMax ;
152+ percentDone := 100 * ( APBPosition / APBMax) ;
153+ filled := trunc (APBWIdth * (percentDone / 100 )) ;
154154 Result := ' [' ;
155155 Result := Result + StringOfChar(' #' , filled);
156156 Result := Result + StringOfChar(' -' , APBWIdth - filled);
@@ -178,12 +178,11 @@ function TGenerator.Rng1brc(Range: Integer): Integer;
178178
179179procedure TGenerator.Generate ;
180180var
181- index, progressCount, progressBatch: Int64;
182- stationId: Int64;
183- randomTemp: Integer;
181+ index, progressCount, progressBatch: Integer;
182+ stationId, randomTemp: Integer;
184183 randomTempStr: String[4 ];
185184 outputFileStream: TFileStream;
186- chunkLine, randomTempFinal: String ;
185+ chunkLine, randomTempFinal: Utf8String ;
187186 stationArray, temperatureArray: TStringArray;
188187 LenStationArray, LenTemperatureArray: Array of Integer;
189188 chunkCount, chunkLen, stationsCount, temperaturesCount: Integer;
0 commit comments