home *** CD-ROM | disk | FTP | other *** search
-
- {*******************************************************}
- { }
- { Delphi Visual Component Library }
- { }
- { Copyright (c) 1995,97 Borland International }
- { }
- {*******************************************************}
-
- unit IStreams;
-
- interface
-
- uses VirtIntf, Classes, SysUtils;
-
- type
-
- { TIVCLStreamAdapter }
-
- TIVCLStreamAdapter = class(TIStream)
- protected
- FStream: TStream;
- FOwnStream: Boolean;
- public
- constructor Create(AStream: TStream);
- destructor Destroy; override;
- function Read(var Buffer; Count: Longint): Longint; override;
- function Write(const Buffer; Count: Longint): Longint; override;
- function Seek(Offset: Longint; Origin: Word): Longint; override;
- function GetModifyTime: Longint; override;
- procedure Flush; override;
- procedure SetModifyTime(Value: Longint); override;
- property Stream: TStream read FStream;
- end;
-
- { TIStreamAdapter }
-
- TIStreamAdapter = class(TIVCLStreamAdapter)
- protected
- FModifyTime: Longint;
- public
- constructor Create(AStream: TStream; AOwnStream: Boolean);
- function GetModifyTime: Longint; override;
- procedure SetModifyTime(Value: Longint); override;
- function Write(const Buffer; Count: Longint): Longint; override;
- property OwnStream: Boolean read FOwnStream write FOwnStream;
- end;
-
- { TIMemoryStream }
-
- TIMemoryStream = class(TIStreamAdapter)
- private
- function GetMemoryStream: TMemoryStream;
- public
- constructor Create(AMemoryStream: TMemoryStream);
- property MemoryStream: TMemoryStream read GetMemoryStream;
- end;
-
- { TIFileStream }
-
- TIFileStream = class(TIVCLStreamAdapter)
- private
- function GetFileStream: TFileStream;
- public
- constructor Create(const FileName: string; Mode: Word);
- function GetModifyTime: Longint; override;
- procedure SetModifyTime(Time: Longint); override;
- procedure Flush; override;
- property FileStream: TFileStream read GetFileStream;
- end;
-
- { TVirtualStream }
-
- TVirtualStream = class(TStream)
- private
- FIStream: TIStream;
- public
- constructor Create(AIStream: TIStream);
- destructor Destroy; override;
- function Read(var Buffer; Count: Longint): Longint; override;
- function Write(const Buffer; Count: Longint): Longint; override;
- function Seek(Offset: Longint; Origin: Word): Longint; override;
- function GetModifyTime: Longint;
- procedure SetModifyTime(Time: Longint);
- end;
-
- TExceptionHandler = procedure;
-
- const
- ExceptionHandler: TExceptionHandler = nil;
-
- implementation
-
- uses Windows;
-
- { TIVCLStreamAdapter }
-
- constructor TIVCLStreamAdapter.Create(AStream: TStream);
- begin
- inherited Create;
- FStream := AStream;
- end;
-
- destructor TIVCLStreamAdapter.Destroy;
- begin
- if FOwnStream then FStream.Free;
- inherited Destroy;
- end;
-
- function TIVCLStreamAdapter.Read(var Buffer; Count: Longint): Longint;
- begin
- Result := FStream.Read(Buffer, Count);
- end;
-
- function TIVCLStreamAdapter.Write(const Buffer; Count: Longint): Longint;
- begin
- Result := FStream.Write(Buffer, Count);
- end;
-
- function TIVCLStreamAdapter.Seek(Offset: Longint; Origin: Word): Longint;
- begin
- Result := FStream.Seek(Offset, Origin);
- end;
-
- function TIVCLStreamAdapter.GetModifyTime: Longint;
- begin
- Result := 0;
- end;
-
- procedure TIVCLStreamAdapter.SetModifyTime(Value: Longint);
- begin
- end;
-
- procedure TIVCLStreamAdapter.Flush;
- begin
- end;
-
- { TIStreamAdapter }
-
- constructor TIStreamAdapter.Create(AStream: TStream; AOwnStream: Boolean);
- begin
- FOwnStream := AOwnStream;
- inherited Create(AStream);
- FModifyTime := DateTimeToFileDate(Now);
- end;
-
- function TIStreamAdapter.Write(const Buffer; Count: Longint): Longint;
- begin
- Result := inherited Write(Buffer, Count);
- FModifyTime := DateTimeToFileDate(Now);
- end;
-
- function TIStreamAdapter.GetModifyTime: Longint;
- begin
- Result := FModifyTime;
- end;
-
- procedure TIStreamAdapter.SetModifyTime(Value: Longint);
- begin
- FModifyTime := Value;
- end;
-
- { TIMemoryStream }
-
- constructor TIMemoryStream.Create(AMemoryStream: TMemoryStream);
- begin
- FOwnStream := AMemoryStream = nil;
- if AMemoryStream = nil then AMemoryStream := TMemoryStream.Create;
- inherited Create(AMemoryStream, FOwnStream);
- end;
-
- function TIMemoryStream.GetMemoryStream: TMemoryStream;
- begin
- Result := TMemoryStream(FStream);
- end;
-
- { TIFileStream }
-
- constructor TIFileStream.Create(const FileName: string; Mode: Word);
- begin
- FOwnStream := True;
- inherited Create(TFileStream.Create(FileName, Mode));
- end;
-
- function TIFileStream.GetFileStream: TFileStream;
- begin
- Result := TFileStream(FStream);
- end;
-
- function TIFileStream.GetModifyTime: Longint;
- begin
- Result := FileGetDate(FileStream.Handle);
- end;
-
- procedure TIFileStream.SetModifyTime(Time: Longint);
- begin
- FileSetDate(FileStream.Handle, Time);
- end;
-
- procedure TIFileStream.Flush;
- begin
- FlushFileBuffers(FileStream.Handle);
- end;
-
- { TVirtualStream }
-
- constructor TVirtualStream.Create(AIStream: TIStream);
- begin
- inherited Create;
- FIStream := AIStream;
- end;
-
- destructor TVirtualStream.Destroy;
- begin
- FIStream.Free;
- inherited Destroy;
- end;
-
- function TVirtualStream.Read(var Buffer; Count: Longint): Longint;
- begin
- Result := FIStream.Read(Buffer, Count);
- end;
-
- function TVirtualStream.Write(const Buffer; Count: Longint): Longint;
- begin
- Result := FIStream.Write(Buffer, Count);
- end;
-
- function TVirtualStream.Seek(Offset: Longint; Origin: Word): Longint;
- begin
- Result := FIStream.Seek(Offset, Origin);
- end;
-
- function TVirtualStream.GetModifyTime: Longint;
- begin
- Result := FIStream.GetModifyTime;
- end;
-
- procedure TVirtualStream.SetModifyTime(Time: Longint);
- begin
- FIStream.SetModifyTime(Time);
- end;
-
- end.
-
-