Summary Table
Categories |
Total Count |
PII |
0 |
URL |
0 |
DNS |
0 |
EKL |
0 |
IP |
0 |
PORT |
0 |
VsID |
0 |
CF |
0 |
AI |
0 |
VPD |
0 |
PL |
0 |
Other |
0 |
File Content
unit ORNetMult;
interface
uses
System.Classes,
System.SysUtils,
ORNetIntf,
TRPCB;
type
TORNetMult = class(TInterfacedObject, IORNetParam, IORNetMult)
private
fSubscripts: TStringList;
public
constructor Create;
destructor Destroy; override;
procedure AddSubscript(aSubscript: string; aValue: string); overload;
procedure AddSubscript(aSubscript: string; aValue: Int64); overload;
procedure AddSubscript(aSubscript: string; aValue: double; aPrecision: integer = 2); overload;
procedure AddSubscript(aSubscript: integer; aValue: string); overload;
procedure AddSubscript(aSubscript: integer; aValue: Int64); overload;
procedure AddSubscript(aSubscript: integer; aValue: double; aPrecision: integer = 2); overload;
procedure AddSubscript(aSubscripts: array of const; aValue: string); overload;
procedure AddSubscript(aSubscripts: array of const; aValue: Int64); overload;
procedure AddSubscript(aSubscripts: array of const; aValue: double; aPrecision: integer = 2); overload;
procedure AssignToParamRecord(aParam: TParamRecord);
end;
implementation
{ TORNetMultiple }
constructor TORNetMult.Create;
begin
inherited;
fSubscripts := TStringList.Create;
end;
destructor TORNetMult.Destroy;
begin
FreeAndNil(fSubscripts);
inherited;
end;
procedure TORNetMult.AddSubscript(aSubscript: string; aValue: string);
begin
AddSubscript([aSubscript], aValue);
end;
procedure TORNetMult.AddSubscript(aSubscript: string; aValue: Int64);
begin
AddSubscript([aSubscript], aValue);
end;
procedure TORNetMult.AddSubscript(aSubscript: string; aValue: double; aPrecision: integer = 2);
begin
AddSubscript([aSubscript], aValue, aPrecision);
end;
procedure TORNetMult.AddSubscript(aSubscript: integer; aValue: string);
begin
AddSubscript([aSubscript], aValue);
end;
procedure TORNetMult.AddSubscript(aSubscript: integer; aValue: double; aPrecision: integer = 2);
begin
AddSubscript([aSubscript], aValue, aPrecision);
end;
procedure TORNetMult.AddSubscript(aSubscript: integer; aValue: Int64);
begin
AddSubscript([aSubscript], aValue);
end;
procedure TORNetMult.AddSubscript(aSubscripts: array of const; aValue: Int64);
begin
AddSubscript(aSubscripts, IntToStr(aValue));
end;
procedure TORNetMult.AddSubscript(aSubscripts: array of const; aValue: double; aPrecision: integer);
begin
AddSubscript(aSubscripts, Format('%0.*f', [aPrecision, aValue]));
end;
procedure TORNetMult.AddSubscript(aSubscripts: array of const; aValue: string);
{
Do NOT modify!!! This is the final overload for all other AddSubscript methods!!!
Issues with an AddSubscript method should be addressed in the proper method above
before this method is called.
}
var
i: integer;
aNode: string;
aSubnode: string;
begin
aNode := '';
aSubnode := '';
if Length(aSubscripts) = 0 then
raise Exception.CreateFmt('Error-%s: Must have at least 1 subscript.', [Self.ClassName]);
for i := Low(aSubscripts) to High(aSubscripts) do
begin
case aSubscripts[i].VType of
vtInteger:
aSubnode := AnsiQuotedStr(IntToStr(aSubscripts[i].VInteger), '"');
vtInt64:
aSubnode := AnsiQuotedStr(IntToStr(aSubscripts[i].VInt64^), '"');
vtString:
aSubnode := AnsiQuotedStr(string(aSubscripts[i].VString), '"');
vtWideChar:
aSubnode := AnsiQuotedStr(string(aSubscripts[i].VWideChar), '"');
vtAnsiString:
aSubnode := AnsiQuotedStr(string(aSubscripts[i].VAnsiString), '"');
vtUnicodeString:
aSubnode := AnsiQuotedStr(string(aSubscripts[i].VUnicodeString), '"');
else
raise Exception.CreateFmt('Error-%s: Only Integer, Int64, String, WideChar, AnsiString, and UnicodeString types allowed as subscripts.', [Self.ClassName]);
end;
if Length(aSubnode) = 0 then
raise Exception.CreateFmt('Error-%s: Null subscript error.', [Self.ClassName]);
case Length(aNode) of
0: aNode := aSubnode;
else
aNode := Format('%s,%s', [aNode, aSubnode]);
end;
end;
//fSubscripts.Values[aNode] := aValue;
if aValue <> '' then
fSubscripts.Values[aNode] := aValue
else
begin
if fSubscripts.IndexOfName(aNode) > -1 then
fSubscripts.Delete(fSubscripts.IndexOfName(aNode));
fSubscripts.Add(aNode + '=' + aValue);
end;
end;
procedure TORNetMult.AssignToParamRecord(aParam: TParamRecord);
var
i: integer;
begin
aParam.PType := list;
for i := 0 to fSubscripts.Count - 1 do
aParam.Mult[fSubscripts.Names[i]] := fSubscripts.ValueFromIndex[i];
end;
end.