From 2e95929d4ef5ada8ac42e840a7e247c98b257581 Mon Sep 17 00:00:00 2001 From: Bergmann89 Date: Tue, 29 Sep 2015 20:43:50 +0200 Subject: [PATCH] * [uutlSerialization] implemented TutlFileReaderProxy and TutlFileWriterProxy --- uutlSerialization.pas | 81 ++++++++++++++++++++++++++++++++++++------- 1 file changed, 69 insertions(+), 12 deletions(-) diff --git a/uutlSerialization.pas b/uutlSerialization.pas index bd70ca9..81a740f 100644 --- a/uutlSerialization.pas +++ b/uutlSerialization.pas @@ -30,8 +30,45 @@ type procedure SaveStream(const aFilename: String; const aStream: TStream); end; +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + TutlFileReaderProxy = class(TInterfacedObject, IutlFileReader) + private + fReader: IutlFileReader; + fPrefix: String; + public + function LoadStream(const aFilename: String; const aStream: TStream): Boolean; + constructor Create(const aReader: IutlFileReader; const aPrefix: String); + end; + + TutlFileWriterProxy = class(TInterfacedObject, IutlFileWriter) + private + fWriter: IutlFileWriter; + fPrefix: String; + public + procedure SaveStream(const aFilename: String; const aStream: TStream); + constructor Create(const aWriter: IutlFileWriter; const aPrefix: String); + end; + implementation +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//TutlSimpleFileReader////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +function TutlSimpleFileReader.LoadStream(const aFilename: String; const aStream: TStream): Boolean; +var + fs: TFileStream; +begin + result := FileExists(aFilename); + if result then begin + fs := TFileStream.Create(aFilename, fmOpenRead); + try + aStream.CopyFrom(fs, fs.Size - fs.Position); + finally + FreeAndNil(fs); + end; + end; +end; + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //TutlSimpleFileWriter////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -48,21 +85,41 @@ begin end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//TutlSimpleFileReader////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//TutlFileReaderProxy/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -function TutlSimpleFileReader.LoadStream(const aFilename: String; const aStream: TStream): Boolean; +function TutlFileReaderProxy.LoadStream(const aFilename: String; const aStream: TStream): Boolean; var - fs: TFileStream; + dir, name: String; begin - result := FileExists(aFilename); - if result then begin - fs := TFileStream.Create(aFilename, fmOpenRead); - try - aStream.CopyFrom(fs, fs.Size - fs.Position); - finally - FreeAndNil(fs); - end; - end; + dir := ExtractFilePath(aFilename); + name := ExtractFileName(aFilename); + result := fReader.LoadStream(dir + fPrefix + name, aStream); +end; + +constructor TutlFileReaderProxy.Create(const aReader: IutlFileReader; const aPrefix: String); +begin + inherited Create; + fReader := aReader; + fPrefix := aPrefix; +end; + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//TutlFileWriterProxy/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +procedure TutlFileWriterProxy.SaveStream(const aFilename: String; const aStream: TStream); +var + dir, name: String; +begin + dir := ExtractFilePath(aFilename); + name := ExtractFileName(aFilename); + fWriter.SaveStream(dir + fPrefix + name, aStream); +end; + +constructor TutlFileWriterProxy.Create(const aWriter: IutlFileWriter; const aPrefix: String); +begin + inherited Create; + fWriter := aWriter; + fPrefix := aPrefix; end; end.