123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- {$mode objfpc}
- {$h+}
- 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.
|