Преглед на файлове

+ Added for Delphi compatibility and InstantObjects

michael преди 20 години
родител
ревизия
84c187e10d
променени са 1 файла, в които са добавени 167 реда и са изтрити 0 реда
  1. 167 0
      fcl/inc/streamex.pp

+ 167 - 0
fcl/inc/streamex.pp

@@ -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.