mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#1985 Curve Calculator : Simplify interface to expression parser
This commit is contained in:
@@ -25,9 +25,7 @@ TEST(RicExpressionParserTest, BasicUsage)
|
||||
parser.assignVector("c", c);
|
||||
|
||||
QString expr = "c := a + b";
|
||||
parser.setExpression(expr);
|
||||
|
||||
EXPECT_TRUE(parser.evaluate());
|
||||
EXPECT_TRUE(parser.evaluate(expr));
|
||||
|
||||
EXPECT_DOUBLE_EQ(c[0], 110.0);
|
||||
EXPECT_DOUBLE_EQ(c[9], 128.0);
|
||||
|
20
ThirdParty/expressionparser/ExpressionParser.cpp
vendored
20
ThirdParty/expressionparser/ExpressionParser.cpp
vendored
@@ -36,14 +36,6 @@ ExpressionParser::~ExpressionParser()
|
||||
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void ExpressionParser::setExpression(const QString& expression)
|
||||
{
|
||||
m_expressionParserImpl->setExpression(expression);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -63,15 +55,7 @@ void ExpressionParser::assignVector(const QString& variableName, std::vector<dou
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
bool ExpressionParser::evaluate()
|
||||
bool ExpressionParser::evaluate(const QString& expressionText, QString* errorText)
|
||||
{
|
||||
return m_expressionParserImpl->evaluate();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
QString ExpressionParser::errorText()
|
||||
{
|
||||
return m_expressionParserImpl->errorText();
|
||||
return m_expressionParserImpl->evaluate(expressionText, errorText);
|
||||
}
|
||||
|
@@ -36,10 +36,8 @@ public:
|
||||
|
||||
static std::vector<QString> detectReferencedVariables(const QString& expression);
|
||||
|
||||
void setExpression(const QString& expression);
|
||||
void assignVector(const QString& variableName, std::vector<double>& vector);
|
||||
bool evaluate();
|
||||
QString errorText();
|
||||
bool evaluate(const QString& expressionText, QString* errorText = nullptr);
|
||||
|
||||
private:
|
||||
std::unique_ptr<ExpressionParserImpl> m_expressionParserImpl;
|
||||
|
@@ -26,14 +26,6 @@ ExpressionParserImpl::ExpressionParserImpl()
|
||||
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void ExpressionParserImpl::setExpression(const QString& expression)
|
||||
{
|
||||
m_expression = expression;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -64,13 +56,14 @@ void ExpressionParserImpl::assignVector(const QString& variableName, std::vector
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
bool ExpressionParserImpl::evaluate()
|
||||
bool ExpressionParserImpl::evaluate(const QString& expressionText, QString* errorText)
|
||||
{
|
||||
expression_t expression;
|
||||
|
||||
expression.register_symbol_table(m_symbol_table);
|
||||
|
||||
if (!parser.compile(m_expression.toStdString(), expression))
|
||||
parser_t parser;
|
||||
if (!parser.compile(expressionText.toStdString(), expression))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@@ -78,13 +71,18 @@ bool ExpressionParserImpl::evaluate()
|
||||
// Trigger evaluation
|
||||
expression.value();
|
||||
|
||||
if (errorText)
|
||||
{
|
||||
*errorText = parserErrorText(parser);
|
||||
}
|
||||
|
||||
return (parser.error_count() == 0);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
QString ExpressionParserImpl::errorText() const
|
||||
QString ExpressionParserImpl::parserErrorText(parser_t& parser)
|
||||
{
|
||||
QString txt;
|
||||
|
||||
|
@@ -34,20 +34,14 @@ class ExpressionParserImpl
|
||||
public:
|
||||
ExpressionParserImpl();
|
||||
|
||||
void setExpression(const QString& expression);
|
||||
|
||||
static std::vector<QString> detectReferencedVariables(const QString& expression);
|
||||
|
||||
void assignVector(const QString& variableName, std::vector<double>& vector);
|
||||
|
||||
bool evaluate();
|
||||
|
||||
QString errorText() const;
|
||||
void assignVector(const QString& variableName, std::vector<double>& vector);
|
||||
bool evaluate(const QString& expressionText, QString* errorText = nullptr);
|
||||
|
||||
private:
|
||||
QString m_expression;
|
||||
QString parserErrorText(parser_t& parser);
|
||||
|
||||
private:
|
||||
symbol_table_t m_symbol_table;
|
||||
expression_t expression;
|
||||
mutable parser_t parser;
|
||||
};
|
||||
|
Reference in New Issue
Block a user