summaryrefslogtreecommitdiff
path: root/rtl/objpas
diff options
context:
space:
mode:
Diffstat (limited to 'rtl/objpas')
-rw-r--r--rtl/objpas/classes/classesh.inc151
-rw-r--r--rtl/objpas/classes/streams.inc760
2 files changed, 889 insertions, 22 deletions
diff --git a/rtl/objpas/classes/classesh.inc b/rtl/objpas/classes/classesh.inc
index 2c31a44090..119a777980 100644
--- a/rtl/objpas/classes/classesh.inc
+++ b/rtl/objpas/classes/classesh.inc
@@ -894,13 +894,162 @@ type
procedure SetSize(const NewSize: Int64); virtual;overload;
procedure ReadNotImplemented;
procedure WriteNotImplemented;
+ function ReadMaxSizeData(Var Buffer; aSize,aCount : NativeInt) : NativeInt;
+ Procedure ReadExactSizeData(Var Buffer; aSize,aCount : NativeInt);
+ function WriteMaxSizeData(Const Buffer; aSize,aCount : NativeInt) : NativeInt;
+ Procedure WriteExactSizeData(Const Buffer; aSize,aCount : NativeInt);
public
function Read(var Buffer; Count: Longint): Longint; virtual;
+ function Read(Buffer: TBytes; Count: Longint): Longint; overload;
+ function Read(Buffer : TBytes; aOffset, Count: Longint): Longint; 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;
+
function Seek(Offset: Longint; Origin: Word): Longint; virtual; overload;
function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; virtual; overload;
+
+ function ReadData(Buffer: Pointer; Count: NativeInt): NativeInt; overload;
+ function ReadData(const Buffer: TBytes; Count: NativeInt): NativeInt; overload;
+ function ReadData(var Buffer: Boolean): NativeInt; overload;
+ function ReadData(var Buffer: Boolean; Count: NativeInt): NativeInt; overload;
+ function ReadData(var Buffer: AnsiChar): NativeInt; overload;
+ function ReadData(var Buffer: AnsiChar; Count: NativeInt): NativeInt; overload;
+ function ReadData(var Buffer: WideChar): NativeInt; overload;
+ function ReadData(var Buffer: WideChar; Count: NativeInt): NativeInt; overload;
+ function ReadData(var Buffer: Int8): NativeInt; overload;
+ function ReadData(var Buffer: Int8; Count: NativeInt): NativeInt; overload;
+ function ReadData(var Buffer: UInt8): NativeInt; overload;
+ function ReadData(var Buffer: UInt8; Count: NativeInt): NativeInt; overload;
+ function ReadData(var Buffer: Int16): NativeInt; overload;
+ function ReadData(var Buffer: Int16; Count: NativeInt): NativeInt; overload;
+ function ReadData(var Buffer: UInt16): NativeInt; overload;
+ function ReadData(var Buffer: UInt16; Count: NativeInt): NativeInt; overload;
+ function ReadData(var Buffer: Int32): NativeInt; overload;
+ function ReadData(var Buffer: Int32; Count: NativeInt): NativeInt; overload;
+ function ReadData(var Buffer: UInt32): NativeInt; overload;
+ function ReadData(var Buffer: UInt32; Count: NativeInt): NativeInt; overload;
+ function ReadData(var Buffer: Int64): NativeInt; overload;
+ function ReadData(var Buffer: Int64; Count: NativeInt): NativeInt; overload;
+ function ReadData(var Buffer: UInt64): NativeInt; overload;
+ function ReadData(var Buffer: UInt64; Count: NativeInt): NativeInt; overload;
+ function ReadData(var Buffer: Single): NativeInt; overload;
+ function ReadData(var Buffer: Single; Count: NativeInt): NativeInt; overload;
+ function ReadData(var Buffer: Double): NativeInt; overload;
+ function ReadData(var Buffer: Double; Count: NativeInt): NativeInt; overload;
+{$IFDEF FPC_HAS_TYPE_EXTENDED}
+ function ReadData(var Buffer: Extended): NativeInt; overload;
+ function ReadData(var Buffer: Extended; Count: NativeInt): NativeInt; overload;
+ function ReadData(var Buffer: TExtended80Rec): NativeInt; overload;
+ function ReadData(var Buffer: TExtended80Rec; Count: NativeInt): NativeInt; overload;
+{$ENDIF}
procedure ReadBuffer(var Buffer; Count: Longint);
+ procedure ReadBuffer(var Buffer: TBytes; Count: NativeInt); overload;
+ procedure ReadBuffer(var Buffer: TBytes; Offset, Count: NativeInt); overload;
+
+ procedure ReadBufferData(var Buffer: Boolean); overload;
+ procedure ReadBufferData(var Buffer: Boolean; Count: NativeInt); overload;
+ procedure ReadBufferData(var Buffer: AnsiChar); overload;
+ procedure ReadBufferData(var Buffer: AnsiChar; Count: NativeInt); overload;
+ procedure ReadBufferData(var Buffer: WideChar); overload;
+ procedure ReadBufferData(var Buffer: WideChar; Count: NativeInt); overload;
+ procedure ReadBufferData(var Buffer: Int8); overload;
+ procedure ReadBufferData(var Buffer: Int8; Count: NativeInt); overload;
+ procedure ReadBufferData(var Buffer: UInt8); overload;
+ procedure ReadBufferData(var Buffer: UInt8; Count: NativeInt); overload;
+ procedure ReadBufferData(var Buffer: Int16); overload;
+ procedure ReadBufferData(var Buffer: Int16; Count: NativeInt); overload;
+ procedure ReadBufferData(var Buffer: UInt16); overload;
+ procedure ReadBufferData(var Buffer: UInt16; Count: NativeInt); overload;
+ procedure ReadBufferData(var Buffer: Int32); overload;
+ procedure ReadBufferData(var Buffer: Int32; Count: NativeInt); overload;
+ procedure ReadBufferData(var Buffer: UInt32); overload;
+ procedure ReadBufferData(var Buffer: UInt32; Count: NativeInt); overload;
+ procedure ReadBufferData(var Buffer: Int64); overload;
+ procedure ReadBufferData(var Buffer: Int64; Count: NativeInt); overload;
+ procedure ReadBufferData(var Buffer: UInt64); overload;
+ procedure ReadBufferData(var Buffer: UInt64; Count: NativeInt); overload;
+ procedure ReadBufferData(var Buffer: Single); overload;
+ procedure ReadBufferData(var Buffer: Single; Count: NativeInt); overload;
+ procedure ReadBufferData(var Buffer: Double); overload;
+ procedure ReadBufferData(var Buffer: Double; Count: NativeInt); overload;
+{$IFDEF FPC_HAS_TYPE_EXTENDED}
+ procedure ReadBufferData(var Buffer: Extended); overload;
+ procedure ReadBufferData(var Buffer: Extended; Count: NativeInt); overload;
+ procedure ReadBufferData(var Buffer: TExtended80Rec); overload;
+ procedure ReadBufferData(var Buffer: TExtended80Rec; Count: NativeInt); overload;
+{$ENDIF}
procedure WriteBuffer(const Buffer; Count: Longint);
+ procedure WriteBuffer(const Buffer: TBytes; Count: NativeInt); overload;
+ procedure WriteBuffer(const Buffer: TBytes; Offset, Count: NativeInt); overload;
+
+ function WriteData(const Buffer: TBytes; Count: NativeInt): NativeInt; overload;
+ function WriteData(const Buffer: Pointer; Count: NativeInt): NativeInt; overload;
+ function WriteData(const Buffer: Boolean): NativeInt; overload;
+ function WriteData(const Buffer: Boolean; Count: NativeInt): NativeInt; overload;
+ function WriteData(const Buffer: AnsiChar): NativeInt; overload;
+ function WriteData(const Buffer: AnsiChar; Count: NativeInt): NativeInt; overload;
+ function WriteData(const Buffer: WideChar): NativeInt; overload;
+ function WriteData(const Buffer: WideChar; Count: NativeInt): NativeInt; overload;
+ function WriteData(const Buffer: Int8): NativeInt; overload;
+ function WriteData(const Buffer: Int8; Count: NativeInt): NativeInt; overload;
+ function WriteData(const Buffer: UInt8): NativeInt; overload;
+ function WriteData(const Buffer: UInt8; Count: NativeInt): NativeInt; overload;
+ function WriteData(const Buffer: Int16): NativeInt; overload;
+ function WriteData(const Buffer: Int16; Count: NativeInt): NativeInt; overload;
+ function WriteData(const Buffer: UInt16): NativeInt; overload;
+ function WriteData(const Buffer: UInt16; Count: NativeInt): NativeInt; overload;
+ function WriteData(const Buffer: Int32): NativeInt; overload;
+ function WriteData(const Buffer: Int32; Count: NativeInt): NativeInt; overload;
+ function WriteData(const Buffer: UInt32): NativeInt; overload;
+ function WriteData(const Buffer: UInt32; Count: NativeInt): NativeInt; overload;
+ function WriteData(const Buffer: Int64): NativeInt; overload;
+ function WriteData(const Buffer: Int64; Count: NativeInt): NativeInt; overload;
+ function WriteData(const Buffer: UInt64): NativeInt; overload;
+ function WriteData(const Buffer: UInt64; Count: NativeInt): NativeInt; overload;
+ function WriteData(const Buffer: Single): NativeInt; overload;
+ function WriteData(const Buffer: Single; Count: NativeInt): NativeInt; overload;
+ function WriteData(const Buffer: Double): NativeInt; overload;
+ function WriteData(const Buffer: Double; Count: NativeInt): NativeInt; overload;
+{$IFDEF FPC_HAS_TYPE_EXTENDED}
+ function WriteData(const Buffer: Extended): NativeInt; overload;
+ function WriteData(const Buffer: Extended; Count: NativeInt): NativeInt; overload;
+ function WriteData(const Buffer: TExtended80Rec): NativeInt; overload;
+ function WriteData(const Buffer: TExtended80Rec; Count: NativeInt): NativeInt; overload;
+{$ENDIF}
+ procedure WriteBufferData(Buffer: Integer); overload;
+ procedure WriteBufferData(Buffer: Integer; Count: NativeInt); overload;
+ procedure WriteBufferData(Buffer: Boolean); overload;
+ procedure WriteBufferData(Buffer: Boolean; Count: NativeInt); overload;
+ procedure WriteBufferData(Buffer: AnsiChar); overload;
+ procedure WriteBufferData(Buffer: AnsiChar; Count: NativeInt); overload;
+ procedure WriteBufferData(Buffer: WideChar); overload;
+ procedure WriteBufferData(Buffer: WideChar; Count: NativeInt); overload;
+ procedure WriteBufferData(Buffer: Int8); overload;
+ procedure WriteBufferData(Buffer: Int8; Count: NativeInt); overload;
+ procedure WriteBufferData(Buffer: UInt8); overload;
+ procedure WriteBufferData(Buffer: UInt8; Count: NativeInt); overload;
+ procedure WriteBufferData(Buffer: Int16); overload;
+ procedure WriteBufferData(Buffer: Int16; Count: NativeInt); overload;
+ procedure WriteBufferData(Buffer: UInt16); overload;
+ procedure WriteBufferData(Buffer: UInt16; Count: NativeInt); overload;
+ procedure WriteBufferData(Buffer: UInt32); overload;
+ procedure WriteBufferData(Buffer: UInt32; Count: NativeInt); overload;
+ procedure WriteBufferData(Buffer: Int64); overload;
+ procedure WriteBufferData(Buffer: Int64; Count: NativeInt); overload;
+ procedure WriteBufferData(Buffer: UInt64); overload;
+ procedure WriteBufferData(Buffer: UInt64; Count: NativeInt); overload;
+ procedure WriteBufferData(Buffer: Single); overload;
+ procedure WriteBufferData(Buffer: Single; Count: NativeInt); overload;
+ procedure WriteBufferData(Buffer: Double); overload;
+ procedure WriteBufferData(Buffer: Double; Count: NativeInt); overload;
+{$IFDEF FPC_HAS_TYPE_EXTENDED}
+ procedure WriteBufferData(Buffer: Extended); overload;
+ procedure WriteBufferData(Buffer: Extended; Count: NativeInt); overload;
+ procedure WriteBufferData(Buffer: TExtended80Rec); overload;
+ procedure WriteBufferData(Buffer: TExtended80Rec; Count: NativeInt); overload;
+{$ENDIF}
function CopyFrom(Source: TStream; Count: Int64): Int64;
function ReadComponent(Instance: TComponent): TComponent;
function ReadComponentRes(Instance: TComponent): TComponent;
@@ -990,6 +1139,7 @@ type
private
FMemory: Pointer;
FSize, FPosition: PtrInt;
+ FSizeBoundsSeek : Boolean;
protected
Function GetSize : Int64; Override;
function GetPosition: Int64; Override;
@@ -1000,6 +1150,7 @@ type
procedure SaveToStream(Stream: TStream);
procedure SaveToFile(const FileName: string);
property Memory: Pointer read FMemory;
+ Property SizeBoundsSeek : Boolean Read FSizeBoundsSeek Write FSizeBoundsSeek;
end;
{ TMemoryStream }
diff --git a/rtl/objpas/classes/streams.inc b/rtl/objpas/classes/streams.inc
index ac842738c9..fe5d7ed0d9 100644
--- a/rtl/objpas/classes/streams.inc
+++ b/rtl/objpas/classes/streams.inc
@@ -30,6 +30,26 @@ begin
Result := 0;
end;
+function TStream.Read(Buffer: TBytes; Count: Longint): Longint;
+begin
+ Result:=Read(Buffer,0,Count);
+end;
+
+function TStream.Read(Buffer: TBytes; aOffset, Count: Longint): Longint;
+begin
+ Result:=Read(Buffer[aOffset],Count);
+end;
+
+function TStream.Write(const Buffer: TBytes; Offset, Count: Longint): Longint;
+begin
+ Result:=Write(Buffer[Offset],Count);
+end;
+
+function TStream.Write(const Buffer: TBytes; Count: Longint): Longint;
+begin
+ Result:=Write(Buffer,0,Count);
+end;
+
function TStream.Write(const Buffer; Count: Longint): Longint;
begin
WriteNotImplemented;
@@ -178,35 +198,728 @@ end;
Result:=Seek(longint(Offset),ord(Origin));
end;
- procedure TStream.ReadBuffer(var Buffer; Count: Longint);
+ function TStream.ReadData(Buffer: Pointer; Count: NativeInt): NativeInt;
+ begin
+ Result:=Read(Buffer^,Count);
+ end;
- Var
- r,t : longint;
+ function TStream.ReadData(const Buffer: TBytes; Count: NativeInt): NativeInt;
+ begin
+ Result:=Read(Buffer,0,Count);
+ end;
+
+ function TStream.ReadData(var Buffer: Boolean): NativeInt;
+ begin
+ Result:=Read(Buffer,sizeOf(Buffer));
+ end;
+
+function TStream.ReadMaxSizeData(Var Buffer; aSize,aCount : NativeInt) : NativeInt;
+
+Var
+ CP : Int64;
+
+begin
+ if aCount<=aSize then
+ Result:=read(Buffer,aCount)
+ else
+ begin
+ Result:=Read(Buffer,aSize);
+ CP:=Position;
+ Result:=Result+Seek(aCount-aSize,soCurrent)-CP;
+ end
+end;
+
+function TStream.WriteMaxSizeData(Const Buffer; aSize,aCount : NativeInt) : NativeInt;
+Var
+ CP : Int64;
+
+begin
+ if aCount<=aSize then
+ Result:=Write(Buffer,aCount)
+ else
+ begin
+ Result:=Write(Buffer,aSize);
+ CP:=Position;
+ Result:=Result+Seek(aCount-aSize,soCurrent)-CP;
+ end
+end;
+
+procedure TStream.WriteExactSizeData(const Buffer; aSize, aCount: NativeInt);
+begin
+ // Embarcadero docs mentions no exception. Does not seem very logical
+ WriteMaxSizeData(Buffer,aSize,ACount);
+end;
+
+procedure TStream.ReadExactSizeData(var Buffer; aSize, aCount: NativeInt);
+begin
+ if ReadMaxSizeData(Buffer,aSize,ACount)<>aCount then
+ Raise EReadError.Create(SReadError);
+end;
+
+
+function TStream.ReadData(var Buffer: Boolean; Count: NativeInt): NativeInt;
+begin
+ Result:=ReadMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.ReadData(var Buffer: AnsiChar): NativeInt;
+begin
+ Result:=Read(Buffer,sizeOf(Buffer));
+end;
+
+function TStream.ReadData(var Buffer: AnsiChar; Count: NativeInt): NativeInt;
+begin
+ Result:=ReadMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.ReadData(var Buffer: WideChar): NativeInt;
+begin
+ Result:=Read(Buffer,sizeOf(Buffer));
+end;
+
+function TStream.ReadData(var Buffer: WideChar; Count: NativeInt): NativeInt;
+begin
+ Result:=ReadMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.ReadData(var Buffer: Int8): NativeInt;
+begin
+ Result:=Read(Buffer,sizeOf(Buffer));
+end;
+
+function TStream.ReadData(var Buffer: Int8; Count: NativeInt): NativeInt;
+begin
+ Result:=ReadMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.ReadData(var Buffer: UInt8): NativeInt;
+begin
+ Result:=Read(Buffer,sizeOf(Buffer));
+end;
+
+function TStream.ReadData(var Buffer: UInt8; Count: NativeInt): NativeInt;
+begin
+ Result:=ReadMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.ReadData(var Buffer: Int16): NativeInt;
+begin
+ Result:=Read(Buffer,sizeOf(Buffer));
+end;
+
+function TStream.ReadData(var Buffer: Int16; Count: NativeInt): NativeInt;
+begin
+ Result:=ReadMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.ReadData(var Buffer: UInt16): NativeInt;
+begin
+ Result:=Read(Buffer,sizeOf(Buffer));
+end;
+
+function TStream.ReadData(var Buffer: UInt16; Count: NativeInt): NativeInt;
+begin
+ Result:=ReadMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.ReadData(var Buffer: Int32): NativeInt;
+begin
+ Result:=Read(Buffer,sizeOf(Buffer));
+end;
+
+function TStream.ReadData(var Buffer: Int32; Count: NativeInt): NativeInt;
+begin
+ Result:=ReadMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.ReadData(var Buffer: UInt32): NativeInt;
+begin
+ Result:=Read(Buffer,sizeOf(Buffer));
+end;
+
+function TStream.ReadData(var Buffer: UInt32; Count: NativeInt): NativeInt;
+begin
+ Result:=ReadMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.ReadData(var Buffer: Int64): NativeInt;
+begin
+ Result:=Read(Buffer,sizeOf(Buffer));
+end;
+
+function TStream.ReadData(var Buffer: Int64; Count: NativeInt): NativeInt;
+begin
+ Result:=ReadMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.ReadData(var Buffer: UInt64): NativeInt;
+begin
+ Result:=Read(Buffer,sizeOf(Buffer));
+end;
+
+function TStream.ReadData(var Buffer: UInt64; Count: NativeInt): NativeInt;
+begin
+ Result:=ReadMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.ReadData(var Buffer: Single): NativeInt;
+begin
+ Result:=Read(Buffer,sizeOf(Buffer));
+end;
+
+function TStream.ReadData(var Buffer: Single; Count: NativeInt): NativeInt;
+begin
+ Result:=ReadMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.ReadData(var Buffer: Double): NativeInt;
+begin
+ Result:=Read(Buffer,sizeOf(Buffer));
+end;
+
+function TStream.ReadData(var Buffer: Double; Count: NativeInt): NativeInt;
+begin
+ Result:=ReadMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+{$IFDEF FPC_HAS_TYPE_EXTENDED}
+function TStream.ReadData(var Buffer: Extended): NativeInt;
+begin
+ Result:=Read(Buffer,sizeOf(Buffer));
+end;
+
+function TStream.ReadData(var Buffer: Extended; Count: NativeInt): NativeInt;
+begin
+ Result:=ReadMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.ReadData(var Buffer: TExtended80Rec): NativeInt;
+begin
+ Result:=Read(Buffer,sizeOf(Buffer));
+end;
+
+function TStream.ReadData(var Buffer: TExtended80Rec; Count: NativeInt): NativeInt;
+begin
+ Result:=ReadMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+{$ENDIF}
+
+procedure TStream.ReadBuffer(var Buffer; Count: Longint);
+
+Var
+ r,t : longint;
+
+begin
+ t:=0;
+ repeat
+ r:=Read(PByte(@Buffer)[t],Count-t);
+ inc(t,r);
+ until (t=Count) or (r<=0);
+ if (t<Count) then
+ Raise EReadError.Create(SReadError);
+end;
+
+procedure TStream.ReadBuffer(var Buffer: TBytes; Count: NativeInt);
+begin
+ ReadBuffer(Buffer,0,Count);
+end;
+
+procedure TStream.ReadBuffer(var Buffer: TBytes; Offset, Count: NativeInt);
+begin
+ ReadBuffer(Buffer[OffSet],Count);
+end;
+
+procedure TStream.ReadBufferData(var Buffer: Boolean);
+begin
+ ReadBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.ReadBufferData(var Buffer: Boolean; Count: NativeInt);
+begin
+ ReadExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.ReadBufferData(var Buffer: AnsiChar);
+begin
+ ReadBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.ReadBufferData(var Buffer: AnsiChar; Count: NativeInt);
+begin
+ ReadExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.ReadBufferData(var Buffer: WideChar);
+begin
+ ReadBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.ReadBufferData(var Buffer: WideChar; Count: NativeInt);
+begin
+ ReadExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.ReadBufferData(var Buffer: Int8);
+begin
+ ReadBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.ReadBufferData(var Buffer: Int8; Count: NativeInt);
+begin
+ ReadExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.ReadBufferData(var Buffer: UInt8);
+begin
+ ReadBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.ReadBufferData(var Buffer: UInt8; Count: NativeInt);
+begin
+ ReadExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.ReadBufferData(var Buffer: Int16);
+begin
+ ReadBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.ReadBufferData(var Buffer: Int16; Count: NativeInt);
+begin
+ ReadExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.ReadBufferData(var Buffer: UInt16);
+begin
+ ReadBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.ReadBufferData(var Buffer: UInt16; Count: NativeInt);
+begin
+ ReadExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.ReadBufferData(var Buffer: Int32);
+begin
+ ReadBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.ReadBufferData(var Buffer: Int32; Count: NativeInt);
+begin
+ ReadExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.ReadBufferData(var Buffer: UInt32);
+begin
+ ReadBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.ReadBufferData(var Buffer: UInt32; Count: NativeInt);
+begin
+ ReadExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.ReadBufferData(var Buffer: Int64);
+begin
+ ReadBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.ReadBufferData(var Buffer: Int64; Count: NativeInt);
+begin
+ ReadExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.ReadBufferData(var Buffer: UInt64);
+begin
+ ReadBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.ReadBufferData(var Buffer: UInt64; Count: NativeInt);
+begin
+ ReadExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.ReadBufferData(var Buffer: Single);
+begin
+ ReadBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.ReadBufferData(var Buffer: Single; Count: NativeInt);
+begin
+ ReadExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.ReadBufferData(var Buffer: Double);
+begin
+ ReadBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.ReadBufferData(var Buffer: Double; Count: NativeInt);
+begin
+ ReadExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+{$IFDEF FPC_HAS_TYPE_EXTENDED}
+procedure TStream.ReadBufferData(var Buffer: Extended);
+begin
+ ReadBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.ReadBufferData(var Buffer: Extended; Count: NativeInt);
+begin
+ ReadExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.ReadBufferData(var Buffer: TExtended80Rec);
+begin
+ ReadBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.ReadBufferData(var Buffer: TExtended80Rec; Count: NativeInt);
+begin
+ ReadExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+{$ENDIF}
+
+procedure TStream.WriteBuffer(const Buffer; Count: Longint);
+
+var
+ r,t : Longint;
begin
- t:=0;
- repeat
- r:=Read(PByte(@Buffer)[t],Count-t);
- inc(t,r);
- until (t=Count) or (r<=0);
+ T:=0;
+ Repeat
+ r:=Write(PByte(@Buffer)[t],Count-t);
+ inc(t,r);
+ Until (t=count) or (r<=0);
if (t<Count) then
- Raise EReadError.Create(SReadError);
+ Raise EWriteError.Create(SWriteError);
end;
- procedure TStream.WriteBuffer(const Buffer; Count: Longint);
+procedure TStream.WriteBuffer(const Buffer: TBytes; Count: NativeInt);
+begin
+ WriteBuffer(Buffer,0,Count);
+end;
- var
- r,t : Longint;
+procedure TStream.WriteBuffer(const Buffer: TBytes; Offset, Count: NativeInt);
+begin
+ WriteBuffer(Buffer[Offset],Count);
+end;
- begin
- T:=0;
- Repeat
- r:=Write(PByte(@Buffer)[t],Count-t);
- inc(t,r);
- Until (t=count) or (r<=0);
- if (t<Count) then
- Raise EWriteError.Create(SWriteError);
- end;
+function TStream.WriteData(const Buffer: TBytes; Count: NativeInt): NativeInt;
+begin
+ Result:=Write(Buffer, 0, Count);
+end;
+
+function TStream.WriteData(const Buffer: Pointer; Count: NativeInt): NativeInt;
+begin
+ Result:=Write(Buffer^, Count);
+end;
+
+function TStream.WriteData(const Buffer: Boolean): NativeInt;
+begin
+ Result:=Write(Buffer,SizeOf(Buffer));
+end;
+
+function TStream.WriteData(const Buffer: Boolean; Count: NativeInt): NativeInt;
+begin
+ Result:=WriteMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.WriteData(const Buffer: AnsiChar): NativeInt;
+begin
+ Result:=Write(Buffer,SizeOf(Buffer));
+end;
+
+function TStream.WriteData(const Buffer: AnsiChar; Count: NativeInt): NativeInt;
+begin
+ Result:=WriteMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.WriteData(const Buffer: WideChar): NativeInt;
+begin
+ Result:=Write(Buffer,SizeOf(Buffer));
+end;
+
+function TStream.WriteData(const Buffer: WideChar; Count: NativeInt): NativeInt;
+begin
+ Result:=WriteMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.WriteData(const Buffer: Int8): NativeInt;
+begin
+ Result:=Write(Buffer,SizeOf(Buffer));
+end;
+
+function TStream.WriteData(const Buffer: Int8; Count: NativeInt): NativeInt;
+begin
+ Result:=WriteMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.WriteData(const Buffer: UInt8): NativeInt;
+begin
+ Result:=Write(Buffer,SizeOf(Buffer));
+end;
+
+function TStream.WriteData(const Buffer: UInt8; Count: NativeInt): NativeInt;
+begin
+ Result:=WriteMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.WriteData(const Buffer: Int16): NativeInt;
+begin
+ Result:=Write(Buffer,SizeOf(Buffer));
+end;
+
+function TStream.WriteData(const Buffer: Int16; Count: NativeInt): NativeInt;
+begin
+ Result:=WriteMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.WriteData(const Buffer: UInt16): NativeInt;
+begin
+ Result:=Write(Buffer,SizeOf(Buffer));
+end;
+
+function TStream.WriteData(const Buffer: UInt16; Count: NativeInt): NativeInt;
+begin
+ Result:=WriteMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.WriteData(const Buffer: Int32): NativeInt;
+begin
+ Result:=Write(Buffer,SizeOf(Buffer));
+end;
+
+function TStream.WriteData(const Buffer: Int32; Count: NativeInt): NativeInt;
+begin
+ Result:=WriteMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.WriteData(const Buffer: UInt32): NativeInt;
+begin
+ Result:=Write(Buffer,SizeOf(Buffer));
+end;
+
+function TStream.WriteData(const Buffer: UInt32; Count: NativeInt): NativeInt;
+begin
+ Result:=WriteMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.WriteData(const Buffer: Int64): NativeInt;
+begin
+ Result:=Write(Buffer,SizeOf(Buffer));
+end;
+
+function TStream.WriteData(const Buffer: Int64; Count: NativeInt): NativeInt;
+begin
+ Result:=WriteMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.WriteData(const Buffer: UInt64): NativeInt;
+begin
+ Result:=Write(Buffer,SizeOf(Buffer));
+end;
+
+function TStream.WriteData(const Buffer: UInt64; Count: NativeInt): NativeInt;
+begin
+ Result:=WriteMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.WriteData(const Buffer: Single): NativeInt;
+begin
+ Result:=Write(Buffer,SizeOf(Buffer));
+end;
+
+function TStream.WriteData(const Buffer: Single; Count: NativeInt): NativeInt;
+begin
+ Result:=WriteMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.WriteData(const Buffer: Double): NativeInt;
+begin
+ Result:=Write(Buffer,SizeOf(Buffer));
+end;
+
+function TStream.WriteData(const Buffer: Double; Count: NativeInt): NativeInt;
+begin
+ Result:=WriteMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+{$IFDEF FPC_HAS_TYPE_EXTENDED}
+function TStream.WriteData(const Buffer: Extended): NativeInt;
+begin
+ Result:=Write(Buffer,SizeOf(Buffer));
+end;
+
+function TStream.WriteData(const Buffer: Extended; Count: NativeInt): NativeInt;
+begin
+ Result:=WriteMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+function TStream.WriteData(const Buffer: TExtended80Rec): NativeInt;
+begin
+ Result:=Write(Buffer,SizeOf(Buffer));
+end;
+
+function TStream.WriteData(const Buffer: TExtended80Rec; Count: NativeInt): NativeInt;
+begin
+ Result:=WriteMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+{$ENDIF}
+
+procedure TStream.WriteBufferData(Buffer: Integer);
+begin
+ WriteBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.WriteBufferData(Buffer: Integer; Count: NativeInt);
+begin
+ WriteMaxSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.WriteBufferData(Buffer: Boolean);
+begin
+ WriteBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.WriteBufferData(Buffer: Boolean; Count: NativeInt);
+begin
+ WriteExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.WriteBufferData(Buffer: AnsiChar);
+begin
+ WriteBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.WriteBufferData(Buffer: AnsiChar; Count: NativeInt);
+begin
+ WriteExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.WriteBufferData(Buffer: WideChar);
+begin
+ WriteBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.WriteBufferData(Buffer: WideChar; Count: NativeInt);
+begin
+ WriteExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.WriteBufferData(Buffer: Int8);
+begin
+ WriteBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.WriteBufferData(Buffer: Int8; Count: NativeInt);
+begin
+ WriteExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.WriteBufferData(Buffer: UInt8);
+begin
+ WriteBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.WriteBufferData(Buffer: UInt8; Count: NativeInt);
+begin
+ WriteExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.WriteBufferData(Buffer: Int16);
+begin
+ WriteBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.WriteBufferData(Buffer: Int16; Count: NativeInt);
+begin
+ WriteExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.WriteBufferData(Buffer: UInt16);
+begin
+ WriteBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.WriteBufferData(Buffer: UInt16; Count: NativeInt);
+begin
+ WriteExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.WriteBufferData(Buffer: UInt32);
+begin
+ WriteBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.WriteBufferData(Buffer: UInt32; Count: NativeInt);
+begin
+ WriteExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.WriteBufferData(Buffer: Int64);
+begin
+ WriteBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.WriteBufferData(Buffer: Int64; Count: NativeInt);
+begin
+ WriteExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.WriteBufferData(Buffer: UInt64);
+begin
+ WriteBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.WriteBufferData(Buffer: UInt64; Count: NativeInt);
+begin
+ WriteExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.WriteBufferData(Buffer: Single);
+begin
+ WriteBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.WriteBufferData(Buffer: Single; Count: NativeInt);
+begin
+ WriteExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.WriteBufferData(Buffer: Double);
+begin
+ WriteBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.WriteBufferData(Buffer: Double; Count: NativeInt);
+begin
+ WriteExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+
+{$IFDEF FPC_HAS_TYPE_EXTENDED}
+procedure TStream.WriteBufferData(Buffer: Extended);
+begin
+ WriteBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.WriteBufferData(Buffer: Extended; Count: NativeInt);
+begin
+ WriteExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+
+procedure TStream.WriteBufferData(Buffer: TExtended80Rec);
+begin
+ WriteBuffer(Buffer,SizeOf(Buffer));
+end;
+
+procedure TStream.WriteBufferData(Buffer: TExtended80Rec; Count: NativeInt);
+begin
+ WriteExactSizeData(Buffer,SizeOf(Buffer),Count);
+end;
+{$ENDIF}
function TStream.CopyFrom(Source: TStream; Count: Int64): Int64;
@@ -447,6 +1160,7 @@ end;
TheSize : Longint;
P : PByte ;
begin
+ Result:='';
ReadBuffer (TheSize,SizeOf(TheSize));
SetLength(Result,TheSize);
// Illegal typecast if no AnsiStrings defined.
@@ -621,6 +1335,8 @@ begin
soFromEnd : FPosition:=FSize+Offset;
soFromCurrent : FPosition:=FPosition+Offset;
end;
+ if SizeBoundsSeek and (FPosition>FSize) then
+ FPosition:=FSize;
Result:=FPosition;
{$IFDEF DEBUG}
if Result < 0 then
@@ -1155,7 +1871,7 @@ begin
sz := sizeof(Buffer)
else
sz := cb;
- sz := FStream.Read(buffer, sz);
+ sz := FStream.Read(buffer[0],sz);
inc(cbRead, sz);
stm.Write(@buffer[0], sz, @sz);
inc(cbWritten, sz);