Skip to content

Latest commit

 

History

History
420 lines (288 loc) · 7.86 KB

File metadata and controls

420 lines (288 loc) · 7.86 KB

Store

This object is a instace auto initialized of TStore class, developed for manipulate persistent data. The system base is the class TInifiles, storing data in a file with name AppName.store.ini, where AppName is the name of application.

Inifiles has a know limitation of 256 chars for eatch value.

Const defaults

constant default returned in conversion fail.

  • DEFAULT_DOUBLE = 0.0;
  • DEFAULT_DATETIME = 0.0;
  • DEFAULT_INTEGER = 0;
  • DEFAULT_STRING = '';

Methods


 property AsFloat[Key: string]: Double read GetDoubleDefault;

Get and set a Double value, by a indent key.

Params:

  • Key(String): Key for indetify the variable data;

Return:

Result(Double):

  • When used as property get, return a value stored indexed by key, if it exist
  • Else: return DEFAULT_DOUBLE

Example:

procedure Main;
  var
    previusRation: double;
begin

  // Read a stored RATIO, or return DEFAULT_DOUBLE (0.0)
  previusRation = Store.AsFloat['RATIO'];

  if(previusRation < 2.5) then
  begin
    // Store the value 2.55 in RATIO
    Store.AsFloat['RATIO'] := 2.55;
  end;

end;

property AsFloatDef[Key: string; Default: double]: Double read GetDoubleDefault;

Get a Double value, by a indent key, but can pass a default value in case of fail.

Params:

  • Key(String): Key for indetify the variable data;
  • Default(double): value returned in case of fail;

Return:

Result(Double):

  • When used as property get, return a value stored indexed by key, if it exist
  • Else: return Default parameter.

Example:

procedure Main;
  var
    previusRation: double;
begin

  // Read a stored RATIO, or return 3.2
  previusRation = Store.AsFloatDef['RATIO',3.2];

  if(previusRation > 2.5) then
  begin
    // Store the value 2.55 in RATIO
    Store.AsFloat['RATIO'] := 2.55;
  end;

end;

 property AsStr[Key: string]: string read GetString write SetString;

Get and set a String value, by a indent key.

Params:

  • Key(String): Key for indetify the variable data;

Return:

Result(String):

  • When used as property get, return a value stored indexed by key, if it exist
  • Else: return DEFAULT_STRING

Example:

procedure Main;
  var
    userName:string;
begin

  // Read a stored USER_NAME, or return DEFAULT_STRING ('')
  userName = Store.AsStr['USER_NAME'];

  if(userName = '') then
  begin
    userName := 'unknown'
    // Store the value 'unknown' in USER_NAME
    Store.AsStr['USER_NAME'] := userName;
  end;
end;

property AsStrDef[Key: string; Default: string]: string read GetStringDefault;

Get a String value, by a indent key, but can pass a default value in case of fail.

Params:

  • Key(String): Key for indetify the variable data;
  • Default(String): value returned in case of fail;

Return:

Result(String):

  • When used as property get, return a value stored indexed by key, if it exist
  • Else: return Default parameter.

Example:

procedure Main;
  var
    userName:string;
begin

  // Read a stored USER_NAME, or return 'unknown'
  userName = Store.AsStrDef['USER_NAME','unknown'];
end;

property AsInt[Key: string]: Integer read GetInteger write SetInteger;

Get and set a Integer value, by a indent key.

Params:

  • Key(String): Key for indetify the variable data;

Return:

Result(Integer):

  • When used as property get, return a value stored indexed by key, if it exist
  • Else: return DEFAULT_INTEGER

Example:

procedure Main;
  var
    waterLevel:integer;
begin

  // Read a stored WATER_LEVEL, or return DEFAULT_INTEGER (0)
  waterLevel = Store.AsInt['WATER_LEVEL'];

  if(waterLevel < 100) then
  begin
    inc(waterLevel);

    // Store the value of waterLevel in WATER_LEVEL
    Store.AsInt['WATER_LEVEL'] := waterLevel;
  end;
end;

property AsIntDef[Key: string; Default: Integer]: Integer read GetIntegerDefault;

Get a Integer value, by a indent key, but can pass a default value in case of fail.

Params:

  • Key(String): Key for indetify the variable data;
  • Default(Integer): value returned in case of fail;

Return:

Result(Integer):

  • When used as property get, return a value stored indexed by key, if it exist
  • Else: return Default parameter.

Example:

procedure Main;
  var
    waterLevel:integer;
begin

  // Read a stored WATER_LEVEL, or return 10
  waterLevel = Store.AsIntDef['WATER_LEVEL',10];

  if(waterLevel < 100) then
  begin
    inc(waterLevel);

    // Store the value of waterLevel in WATER_LEVEL
    Store.AsInt['WATER_LEVEL'] := waterLevel;
  end;
end;

property AsDateTime[Key: string]: TDateTime read GetDateTime write SetDateTime;

Get and set a Datetime value, by a indent key.

Params:

  • Key(String): Key for indetify the variable data;

Return:

Result(Datetime):

  • When used as property get, return a value stored indexed by key, if it exist
  • Else: return DEFAULT_DATETIME

Example:

procedure Main;
  var
    lastRun:TDateTime;
    timeAway:string;
begin

  // Read a stored LAST_RUN, or return DEFAULT_DATETIME (0.0)
  lastRun = Store.AsDateTime['LAST_RUN'];

  if(lastRun = DEFAULT_DATETIME) then
    lastRun := now;

  timeAway := FormatDateTime('mm-dd-yyyy hh:nn:ss', now - lastRun);

  Store.AsDateTime['LAST_RUN'] := lastRun;

end;

 property AsDateTimeDef[Key: string; default: TDateTime]: TDateTime read
      GetDateTimeDef;

Get a Datetime value, by a indent key, but can pass a default value in case of fail.

Params:

  • Key(String): Key for indetify the variable data;
  • Default(Datetime): value returned in case of fail;

Return:

Result(Datetime):

  • When used as property get, return a value stored indexed by key, if it exist
  • Else: return Default parameter.

Example:

procedure Main;
  var
    lastRun:TDateTime;
    timeAway:string;
begin

  // Read a stored LAST_RUN, or return now
  lastRun = Store.AsDateTimeDef['LAST_RUN',now];

  timeAway := FormatDateTime('mm-dd-yyyy hh:nn:ss', now - lastRun);

  Store.AsDateTime['LAST_RUN'] := lastRun;

end;

  property SetAsStream[Key: string]: TStream write SetStream;

Set a TStream (and inherited classes) value, by a indent key.

Params:

  • Key(String): Key for indetify the variable data;

Example:

procedure Main;
  var
    mem:TMemoryStream;
    data: TArray<byte>;
begin

  // sample
  data := [0, 1, 2, Ord('A')];

  mem := TMemoryStream.create;
  mem.write(data,length(data));

  // store a mem data
  Store.SetAsStream['INFO'] := mem;

  mem.free;
end;

    property GetAsStream[Key: string]: TStream write GetStream;

Get a TStream (and inherited classes) value, by a indent key.

Params:

  • Key(String): Key for indetify the variable data;

Example:

procedure Main;
  var
    mem:TMemoryStream;
    data: TArray<byte>;
begin

  mem := TMemoryStream.create;

  // read a mem data
  Store.GetAsStream['INFO'] := mem;

  setLength(data,mem.size);
  mem.read(data,length(data));

  mem.free;
end;

property ReduceMemory: Boolean read FReduceMemory write FReduceMemory;

Configuration to dispose (free) TInifile every time write/read data, enable this parameter can reduce a use of memory,but cust a constant load of file. For default this parameter is false.

Value(boolean):

  • False (Default): Stay Inifile opened until application terminate;
  • True: Open and Close Inifile every acess to it.

Example:

procedure Main;
begin
  Store.ReduceMemory = True;

  ...
end;