From f1889daab66922317614f8e796ffb3c89e9ef81e Mon Sep 17 00:00:00 2001 From: Bergmann89 Date: Sat, 4 Apr 2015 16:06:33 +0200 Subject: [PATCH] * [TutlReadBufferStream] added OwnsStream * [TutlSettings] only use vfs when $USE_VFS is defined --- uutlSettings.pas | 37 ++++++++++++++++++++++++++++++++++++- uutlStreamHelper.pas | 10 +++++++--- 2 files changed, 43 insertions(+), 4 deletions(-) diff --git a/uutlSettings.pas b/uutlSettings.pas index 2fddde7..dd8bfa7 100644 --- a/uutlSettings.pas +++ b/uutlSettings.pas @@ -78,7 +78,7 @@ var implementation uses - uutlExceptions, Forms, uvfsManager, uutlMessages, syncobjs; + uutlExceptions, Forms{$IFDEF USE_VFS}, uvfsManager{$ENDIF}, uutlMessages, syncobjs; const SETTINGS_MSG_WAIT_TIME = 1000; //ms @@ -317,6 +317,7 @@ begin fBlocks.ValueAt[i].Instance.SaveToConfig(aMcf.Section(fBlocks.Keys[i])); end; +{$IFDEF USE_VFS} procedure TutlSettings.LoadFromFile(const aFile: string); var sh: IStreamHandle; @@ -331,7 +332,24 @@ begin end; end; end; +{$ELSE} +procedure TutlSettings.LoadFromFile(const aFile: string); +var + fs: TFileStream; + mcf: TutlMCFFile; +begin + fs := TFileStream.Create(aFile, fmOpenRead); + mcf := TutlMCFFile.Create(nil); + try + mcf.LoadFromStream(fs); + LoadFromConfig(mcf); + finally + FreeAndNil(fs); + end; +end; +{$ENDIF} +{$IFDEF USE_VFS} procedure TutlSettings.SaveToFile(const aFile: string); var sh: IStreamHandle; @@ -347,6 +365,23 @@ begin end; end; end; +{$ELSE} +procedure TutlSettings.SaveToFile(const aFile: string); +var + fs: TFileStream; + mcf: TutlMCFFile; +begin + fs := TFileStream.Create(aFile, fmCreate); + mcf := TutlMCFFile.Create(nil); + try + SaveToConfig(mcf); + mcf.SaveToStream(fs); + finally + FreeAndNil(mcf); + FreeAndNil(fs); + end; +end; +{$ENDIF} constructor TutlSettings.Create; begin diff --git a/uutlStreamHelper.pas b/uutlStreamHelper.pas index e8c63b7..15c6254 100644 --- a/uutlStreamHelper.pas +++ b/uutlStreamHelper.pas @@ -81,11 +81,12 @@ type FBufferValid: boolean; FBufferStart, FBufferLen, FBufferAvail: Int64; FPosition: int64; + FOwnsStream: Boolean; protected function GetSize: Int64; override; procedure SetSize(const NewSize: Int64); override; public - constructor Create(const BaseStream: TStream; const BufferSize: Cardinal); + constructor Create(const BaseStream: TStream; const BufferSize: Cardinal; const aOwnsStream: Boolean = false); destructor Destroy; override; function Read(var Buffer; Count: Integer): Integer; override; function Write(const Buffer; Count: Integer): Integer; override; @@ -379,19 +380,22 @@ end; { TutlReadBufferStream } -constructor TutlReadBufferStream.Create(const BaseStream: TStream; const BufferSize: Cardinal); +constructor TutlReadBufferStream.Create(const BaseStream: TStream; const BufferSize: Cardinal; + const aOwnsStream: Boolean); begin inherited Create; FBaseStream:= BaseStream; FBufferLen:= BufferSize; FBuffer:= GetMemory(FBufferLen); + FOwnsStream := aOwnsStream; FPosition:= 0; end; destructor TutlReadBufferStream.Destroy; begin FBufferValid:= false; - //FBaseStream.Free; + if (FOwnsStream) then + FBaseStream.Free; FreeMemory(FBuffer); inherited; end;