* Added Read64/Write64

This commit is contained in:
Michaël Van Canneyt 2022-01-23 12:18:43 +01:00
parent 042eb7e8c1
commit 7097a1030f
2 changed files with 35 additions and 0 deletions

View File

@ -957,10 +957,12 @@ type
function Read(var Buffer; Count: Longint): Longint; virtual; overload;
function Read(var Buffer: TBytes; Count: Longint): Longint; overload;
function Read( Buffer : TBytes; aOffset, Count: Longint): Longint; overload;
function Read64( Buffer : TBytes; aOffset, Count: Int64): Int64; overload;
function Write(const Buffer: TBytes; Offset, Count: Longint): Longint; overload;
function Write(const Buffer: TBytes; Count: Longint): Longint; overload;
function Write(const Buffer; Count: Longint): Longint; virtual; overload;
function Write64(const Buffer: TBytes; Offset, Count: Int64): Int64;
function Seek(Offset: Longint; Origin: Word): Longint; virtual; overload;
function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; virtual; overload;

View File

@ -40,6 +40,22 @@ begin
Result:=Read(Buffer[aOffset],Count);
end;
function TStream.Read64(Buffer: TBytes; aOffset, Count: Int64): Int64;
var
r,t: Int64;
begin
t:=0;
repeat
r:=Count-t;
if r>High(Longint) then r:=High(Longint);
r:=Read(Buffer[aOffset],r);
inc(t,r);
inc(aOffset,r);
until (t>=Count) or (r<=0);
Result:=t;
end;
function TStream.Write(const Buffer: TBytes; Offset, Count: Longint): Longint;
begin
Result:=Write(Buffer[Offset],Count);
@ -56,6 +72,21 @@ begin
Result := 0;
end;
function TStream.Write64(const Buffer: TBytes; Offset, Count: Int64): Int64;
var
w,t: NativeInt;
begin
t:=0;
repeat
w:=Count-t;
if w>High(Longint) then w:=High(Longint);
w:=Write(Buffer[OffSet],w);
inc(t,w);
inc(Offset,W);
until (t>=count) or (w<=0);
Result:=t;
end;
function TStream.GetPosition: Int64;
@ -402,6 +433,7 @@ function TStream.ReadData(var Buffer: TExtended80Rec; Count: NativeInt): NativeI
begin
Result:=ReadMaxSizeData(Buffer,SizeOf(Buffer),Count);
end;
{$ENDIF}
procedure TStream.ReadBuffer(var Buffer; Count: NativeInt);
@ -579,6 +611,7 @@ procedure TStream.ReadBufferData(var Buffer: TExtended80Rec; Count: NativeInt);
begin
ReadExactSizeData(Buffer,SizeOf(Buffer),Count);
end;
{$ENDIF}
procedure TStream.WriteBuffer(const Buffer; Count: NativeInt);