* QuickEvaluate, an helper procedure to quickly evaluate formulas.

git-svn-id: trunk@18180 -
This commit is contained in:
marco 2011-08-12 18:03:07 +00:00
parent bbae63a4f2
commit 215852ac85

View File

@ -244,6 +244,8 @@ const InfixOperatorName : array[addo..powo] of char= ('+','-','*','/','^');
{$I exprstrs.inc}
function QuickEvaluate(formula:ansistring;variablenames : array of ansistring;variablevalues:array of const):Double;
implementation
@ -484,6 +486,52 @@ end;
{$I teval.inc}
{$I rearrang.inc}
function QuickEvaluate(formula:ansistring;variablenames : array of ansistring;variablevalues:array of const):Double;
VAR Expr : TExpression;
SymVars,VarName : TStringList;
I,j : Longint;
Eval : TEvaluator;
Vars : Array[0..1] OF ArbFloat;
x : double;
begin
Expr:=TExpression.Create(formula);
try
SymVars:=Expr.SymbolicValueNames;
try
VarName:=TStringList.Create;
try
Eval:=TEvaluator.Create(Varname,Expr);
if high(variablenames)>0 then
begin
for i:=low(variablenames) to high(variablenames) do
begin
j:=symvars.indexof(variablenames[i]);
if j<>-1 then
begin
case variablevalues[i].vtype of
vtinteger : x:=variablevalues[i].vinteger;
vtextended: x:=variablevalues[i].vextended^;
else
raise exception.create('unknown parameter type');
end;
Eval.SetConstant(variablenames[i],x);
end;
end;
end;
result:=Eval.Evaluate([]);
finally
VarName.free;
end
finally
SymVars.free;
end;
finally
expr.free;
end;
end;
end.
{
$Log$