///////////////////////////////////////////////////////////////////////////////// // // Copyright (C) 2017- Statoil ASA // // ResInsight is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY // WARRANTY; without even the implied warranty of MERCHANTABILITY or // FITNESS FOR A PARTICULAR PURPOSE. // // See the GNU General Public License at // for more details. // ///////////////////////////////////////////////////////////////////////////////// #include "ExpressionParser.h" #include "ExpressionParserImpl.h" //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- ExpressionParser::ExpressionParser() { m_expressionParserImpl = std::unique_ptr( new ExpressionParserImpl ); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- ExpressionParser::~ExpressionParser() { } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- std::vector ExpressionParser::detectReferencedVariables( const QString& expression ) { return ExpressionParserImpl::detectReferencedVariables( expression ); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void ExpressionParser::assignVector( const QString& variableName, std::vector& vector ) { m_expressionParserImpl->assignVector( variableName, vector ); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- std::expected ExpressionParser::evaluate( const QString& expressionText ) { return m_expressionParserImpl->evaluate( expressionText ); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- std::expected ExpressionParser::expandIfStatementsAndEvaluate( const QString& expressionText ) { if ( expressionText.contains( "if", Qt::CaseInsensitive ) ) { QString expanded = ExpressionParserImpl::expandIfStatements( expressionText ); return m_expressionParserImpl->evaluate( expanded ); } return m_expressionParserImpl->evaluate( expressionText ); }