Просмотр исходного кода

* [TutlReadBufferStream] added OwnsStream

* [TutlSettings] only use vfs when $USE_VFS is defined
master
Bergmann89 11 лет назад
Родитель
Сommit
f1889daab6
2 измененных файлов: 43 добавлений и 4 удалений
  1. +36
    -1
      uutlSettings.pas
  2. +7
    -3
      uutlStreamHelper.pas

+ 36
- 1
uutlSettings.pas Просмотреть файл

@@ -78,7 +78,7 @@ var
implementation implementation


uses uses
uutlExceptions, Forms, uvfsManager, uutlMessages, syncobjs;
uutlExceptions, Forms{$IFDEF USE_VFS}, uvfsManager{$ENDIF}, uutlMessages, syncobjs;


const const
SETTINGS_MSG_WAIT_TIME = 1000; //ms SETTINGS_MSG_WAIT_TIME = 1000; //ms
@@ -317,6 +317,7 @@ begin
fBlocks.ValueAt[i].Instance.SaveToConfig(aMcf.Section(fBlocks.Keys[i])); fBlocks.ValueAt[i].Instance.SaveToConfig(aMcf.Section(fBlocks.Keys[i]));
end; end;


{$IFDEF USE_VFS}
procedure TutlSettings.LoadFromFile(const aFile: string); procedure TutlSettings.LoadFromFile(const aFile: string);
var var
sh: IStreamHandle; sh: IStreamHandle;
@@ -331,7 +332,24 @@ begin
end; end;
end; 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); procedure TutlSettings.SaveToFile(const aFile: string);
var var
sh: IStreamHandle; sh: IStreamHandle;
@@ -347,6 +365,23 @@ begin
end; end;
end; 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; constructor TutlSettings.Create;
begin begin


+ 7
- 3
uutlStreamHelper.pas Просмотреть файл

@@ -81,11 +81,12 @@ type
FBufferValid: boolean; FBufferValid: boolean;
FBufferStart, FBufferLen, FBufferAvail: Int64; FBufferStart, FBufferLen, FBufferAvail: Int64;
FPosition: int64; FPosition: int64;
FOwnsStream: Boolean;
protected protected
function GetSize: Int64; override; function GetSize: Int64; override;
procedure SetSize(const NewSize: Int64); override; procedure SetSize(const NewSize: Int64); override;
public public
constructor Create(const BaseStream: TStream; const BufferSize: Cardinal);
constructor Create(const BaseStream: TStream; const BufferSize: Cardinal; const aOwnsStream: Boolean = false);
destructor Destroy; override; destructor Destroy; override;
function Read(var Buffer; Count: Integer): Integer; override; function Read(var Buffer; Count: Integer): Integer; override;
function Write(const Buffer; Count: Integer): Integer; override; function Write(const Buffer; Count: Integer): Integer; override;
@@ -379,19 +380,22 @@ end;


{ TutlReadBufferStream } { TutlReadBufferStream }


constructor TutlReadBufferStream.Create(const BaseStream: TStream; const BufferSize: Cardinal);
constructor TutlReadBufferStream.Create(const BaseStream: TStream; const BufferSize: Cardinal;
const aOwnsStream: Boolean);
begin begin
inherited Create; inherited Create;
FBaseStream:= BaseStream; FBaseStream:= BaseStream;
FBufferLen:= BufferSize; FBufferLen:= BufferSize;
FBuffer:= GetMemory(FBufferLen); FBuffer:= GetMemory(FBufferLen);
FOwnsStream := aOwnsStream;
FPosition:= 0; FPosition:= 0;
end; end;


destructor TutlReadBufferStream.Destroy; destructor TutlReadBufferStream.Destroy;
begin begin
FBufferValid:= false; FBufferValid:= false;
//FBaseStream.Free;
if (FOwnsStream) then
FBaseStream.Free;
FreeMemory(FBuffer); FreeMemory(FBuffer);
inherited; inherited;
end; end;


Загрузка…
Отмена
Сохранить