mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-07 09:47:52 +02:00
* QuickEvaluate, an helper procedure to quickly evaluate formulas.
git-svn-id: trunk@18180 -
This commit is contained in:
parent
bbae63a4f2
commit
215852ac85
@ -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$
|
||||
|
Loading…
Reference in New Issue
Block a user