+ Added for Delphi compatibility and InstantObjects

This commit is contained in:
michael 2005-04-14 17:47:31 +00:00
parent e0f4f77b94
commit 84c187e10d

167
fcl/inc/streamex.pp Normal file
View File

@ -0,0 +1,167 @@
unit streamex;
Interface
uses Classes;
type
{ TBidirBinaryObjectReader }
TBidirBinaryObjectReader = class(TBinaryObjectReader)
protected
function GetPosition: Longint;
procedure SetPosition(const AValue: Longint);
public
property Position: Longint read GetPosition write SetPosition;
end;
{ TBidirBinaryObjectWriter }
TBidirBinaryObjectWriter = class(TBinaryObjectWriter)
protected
function GetPosition: Longint;
procedure SetPosition(const AValue: Longint);
public
property Position: Longint read GetPosition write SetPosition;
end;
{ TDelphiReader }
TDelphiReader = class(TReader)
protected
function GetPosition: LongInt;
procedure SetPosition(const AValue: LongInt);
function CreateDriver(Stream: TStream; BufSize: Integer): TAbstractObjectReader; override;
public
function GetDriver: TBidirBinaryObjectReader;
function ReadStr: string;
procedure Read(var Buf; Count: LongInt);
property Position: LongInt read GetPosition write SetPosition;
end;
{ TDelphiWriter }
TDelphiWriter = class(TWriter)
protected
function GetPosition: Longint;
procedure SetPosition(const AValue: LongInt);
function CreateDriver(Stream: TStream; BufSize: Integer): TAbstractObjectWriter; override;
public
function GetDriver: TBidirBinaryObjectWriter;
procedure FlushBuffer;
procedure Write(const Buf; Count: LongInt);
procedure WriteStr(const Value: string);
procedure WriteValue(Value: TValueType);
property Position: LongInt read GetPosition write SetPosition;
end;
Implementation
{ TBidirBinaryObjectReader }
function TBidirBinaryObjectReader.GetPosition: Longint;
begin
Result := FStream.Position - (FBufEnd - FBufPos);
end;
procedure TBidirBinaryObjectReader.SetPosition(const AValue: Longint);
begin
FStream.Position := AValue;
FBufPos := 0;
FBufEnd := 0;
end;
{ TBidirBinaryObjectWriter }
function TBidirBinaryObjectWriter.GetPosition: Longint;
begin
Result := FStream.Position - (FBufEnd - FBufPos);
end;
procedure TBidirBinaryObjectWriter.SetPosition(const AValue: Longint);
begin
FStream.Position := AValue;
FBufPos := 0;
FBufEnd := 0;
end;
{ TDelphiReader }
function TDelphiReader.GetDriver: TBidirBinaryObjectReader;
begin
Result := (Driver as TBidirBinaryObjectReader);
end;
function TDelphiReader.GetPosition: LongInt;
begin
Result := GetDriver.Position;
end;
procedure TDelphiReader.SetPosition(const AValue: LongInt);
begin
GetDriver.Position := AValue;
end;
function TDelphiReader.CreateDriver(Stream: TStream; BufSize:
Integer): TAbstractObjectReader;
begin
Result := TBidirBinaryObjectReader.Create(Stream, BufSize);
end;
function TDelphiReader.ReadStr: string;
begin
Result := GetDriver.ReadStr;
end;
procedure TDelphiReader.Read(var Buf; Count: LongInt);
begin
GetDriver.Read(Buf, Count);
end;
{ TDelphiWriter }
function TDelphiWriter.GetDriver: TBidirBinaryObjectWriter;
begin
Result := (Driver as TBidirBinaryObjectWriter);
end;
function TDelphiWriter.GetPosition: LongInt;
begin
Result := GetDriver.Position;
end;
procedure TDelphiWriter.SetPosition(const AValue: LongInt);
begin
GetDriver.Position := AValue;
end;
function TDelphiWriter.CreateDriver(Stream: TStream; BufSize: Integer): TAbstractObjectWriter;
begin
Result := TBidirBinaryObjectWriter.Create(Stream, BufSize);
end;
procedure TDelphiWriter.FlushBuffer;
begin
GetDriver.FlushBuffer();
end;
procedure TDelphiWriter.Write(const Buf; Count: Longint);
begin
GetDriver.Write(Buf, Count);
end;
procedure TDelphiWriter.WriteStr(const Value: string);
begin
GetDriver.WriteStr(Value);
end;
procedure TDelphiWriter.WriteValue(Value: TValueType);
begin
GetDriver.WriteValue(Value);
end;
end.