Speed optimization Calculator::EvalFormula().
In certain cases simple conversion string to number will speed up calculating. --HG-- branch : develop
This commit is contained in:
parent
cf8c12f16a
commit
93c84a9dc5
|
@ -73,6 +73,15 @@ Calculator::Calculator()
|
||||||
*/
|
*/
|
||||||
qreal Calculator::EvalFormula(const QHash<QString, QSharedPointer<VInternalVariable>> *vars, const QString &formula)
|
qreal Calculator::EvalFormula(const QHash<QString, QSharedPointer<VInternalVariable>> *vars, const QString &formula)
|
||||||
{
|
{
|
||||||
|
// Converting with locale is much faster in case of single numerical value.
|
||||||
|
QLocale c(QLocale::C);
|
||||||
|
bool ok = false;
|
||||||
|
qreal result = c.toDouble(formula, &ok);
|
||||||
|
if (ok)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
// Parser doesn't know any variable on this stage. So, we just use variable factory that for each unknown variable
|
// Parser doesn't know any variable on this stage. So, we just use variable factory that for each unknown variable
|
||||||
// set value to 0.
|
// set value to 0.
|
||||||
SetVarFactory(AddVariable, this);
|
SetVarFactory(AddVariable, this);
|
||||||
|
@ -80,7 +89,7 @@ qreal Calculator::EvalFormula(const QHash<QString, QSharedPointer<VInternalVaria
|
||||||
|
|
||||||
SetExpr(formula);
|
SetExpr(formula);
|
||||||
|
|
||||||
qreal result = 0;
|
result = 0;
|
||||||
result = Eval();
|
result = Eval();
|
||||||
|
|
||||||
QMap<int, QString> tokens = this->GetTokens();
|
QMap<int, QString> tokens = this->GetTokens();
|
||||||
|
|
Loading…
Reference in New Issue
Block a user