142 lines
3.1 KiB
ObjectPascal
142 lines
3.1 KiB
ObjectPascal
unit xpMemParamManagerUnit;
|
||
|
||
interface
|
||
|
||
uses
|
||
Messages, SysUtils, Variants, Classes;
|
||
// xpConst;
|
||
const
|
||
sFRBreak = #13#10;
|
||
type
|
||
|
||
ParamRow = array[0..1] of Variant;
|
||
TParamArray = array of ParamRow;
|
||
|
||
{ TxpMemParamManager }
|
||
|
||
TxpMemParamManager = class(TObject)
|
||
private
|
||
ParamArray: TParamArray;
|
||
function GetValue(ParamName: Variant): Variant;
|
||
procedure SetValue(ParamName: Variant; const Value: Variant);
|
||
|
||
public
|
||
constructor Create;
|
||
destructor Destroy; override;
|
||
function IndexOf(const ParamName : string) : Integer;
|
||
function Count: Integer;
|
||
function ListAllParamsAndValues: string;
|
||
procedure Delete(ParamName: Variant);
|
||
property Params: TParamArray read ParamArray;
|
||
property Values[ParamName: Variant]: Variant read GetValue write SetValue; default;
|
||
procedure Assign(OwnerParam: TxpMemParamManager);
|
||
|
||
end;
|
||
|
||
implementation
|
||
uses
|
||
lazUTF8;
|
||
procedure TxpMemParamManager.Assign(OwnerParam: TxpMemParamManager);
|
||
var
|
||
i: Integer;
|
||
begin
|
||
if OwnerParam = nil then
|
||
Exit;
|
||
if Length(OwnerParam.ParamArray) > 0 then
|
||
for i:= Low(OwnerParam.ParamArray) to High(OwnerParam.ParamArray) do
|
||
Values[OwnerParam.ParamArray[i][0]] := OwnerParam.ParamArray[i][1]
|
||
end;
|
||
|
||
constructor TxpMemParamManager.Create;
|
||
begin
|
||
inherited Create;
|
||
ParamArray := nil;
|
||
end;
|
||
|
||
destructor TxpMemParamManager.Destroy;
|
||
begin
|
||
ParamArray := nil;
|
||
inherited;
|
||
end;
|
||
|
||
function TxpMemParamManager.GetValue(ParamName: Variant): Variant;
|
||
var
|
||
i: Integer;
|
||
begin
|
||
for i:= Low(ParamArray) to High(ParamArray) do
|
||
if AnsiSameText(ParamArray[i][0], ParamName) then
|
||
begin
|
||
Result := ParamArray[i][1];
|
||
Exit;
|
||
end;
|
||
raise Exception.Create('Не найден параметр ' + VarToStr(ParamName));
|
||
end;
|
||
|
||
function TxpMemParamManager.IndexOf(const ParamName: string): Integer;
|
||
var
|
||
i : Integer;
|
||
begin
|
||
Result := -1;
|
||
for i := Low(ParamArray) to High(ParamArray) do
|
||
begin
|
||
if AnsiSameText(ParamArray[i][0], ParamName) then
|
||
begin
|
||
Result := i;
|
||
Exit;
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
function TxpMemParamManager.Count: Integer;
|
||
begin
|
||
result := High(ParamArray) + 1;
|
||
end;
|
||
|
||
function TxpMemParamManager.ListAllParamsAndValues: string;
|
||
var
|
||
i: integer;
|
||
begin
|
||
Result := '';
|
||
for i := 0 to (self.Count - 1) do
|
||
Result := Result + IntToStr(i) + ': '#39 + VarToStr(self.Params[i][0]) + #39' = '#39 + VarToStr(self.Params[i][1]) + #39'.' + sLineBreak;
|
||
end;
|
||
|
||
procedure TxpMemParamManager.SetValue(ParamName: Variant; const Value: Variant);
|
||
var
|
||
i,j: Integer;
|
||
strVal: string;
|
||
v: variant;
|
||
begin
|
||
if VarIsStr(Value) then
|
||
begin
|
||
v := utf8trim(Value);
|
||
end
|
||
else
|
||
v := Value;
|
||
for i:= Low(ParamArray) to High(ParamArray) do
|
||
if AnsiSameText(ParamArray[i][0], ParamName) then
|
||
begin
|
||
ParamArray[i][1] := v;
|
||
Exit;
|
||
end;
|
||
SetLength(ParamArray, Length(ParamArray) + 1);
|
||
ParamArray[High(ParamArray)][0] := ParamName;
|
||
ParamArray[High(ParamArray)][1] := v;
|
||
end;
|
||
|
||
|
||
procedure TxpMemParamManager.Delete(ParamName: Variant);
|
||
var
|
||
i: Integer;
|
||
begin
|
||
for i:= Low(ParamArray) to High(ParamArray) do
|
||
if AnsiSameText(ParamArray[i][0], ParamName) then
|
||
begin
|
||
ParamArray[i][0] := '';
|
||
Exit;
|
||
end;
|
||
end;
|
||
|
||
end.
|
||
|