66
77const QString ExpressionParser::_cRegisterFunctionTemplate = " r(%1%2)" ;
88
9- ExpressionParser::ExpressionParser (QStringList& expressions)
9+ ExpressionParser::ExpressionParser (const QStringList& expressions) : _findRegRegex(ExpressionRegex::cMatchRegister )
1010{
11- _findRegRegex.setPattern (ExpressionRegex::cMatchRegister);
12- _findRegRegex.optimize ();
13-
1411 parseExpressions (expressions);
1512}
1613
17- void ExpressionParser::dataPoints (QList<DataPoint>& dataPointList)
14+ /* !
15+ * \brief Returns the deduplicated list of data points found during parsing.
16+ */
17+ QList<DataPoint> ExpressionParser::dataPoints () const
1818{
19- dataPointList = _dataPoints;
19+ return _dataPoints;
2020}
2121
22- void ExpressionParser::processedExpressions (QStringList& expressionList)
22+ /* !
23+ * \brief Returns the list of processed expressions with register references replaced.
24+ */
25+ QStringList ExpressionParser::processedExpressions () const
2326{
24- expressionList = _processedExpressions;
27+ return _processedExpressions;
2528}
2629
27- void ExpressionParser::parseExpressions (QStringList& expressions)
30+ void ExpressionParser::parseExpressions (const QStringList& expressions)
2831{
2932 _processedExpressions.clear ();
3033 _dataPoints.clear ();
3134
32- for (const QString& expression : std::as_const ( expressions) )
35+ for (const QString& expression : expressions)
3336 {
3437 _processedExpressions.append (processExpression (expression));
3538 }
@@ -42,8 +45,7 @@ QString ExpressionParser::processExpression(QString const& graphExpr)
4245
4346 if (!i.hasNext () && resultExpr.contains (" $" ))
4447 {
45- auto msg = QString (" Expression evaluation parsing failed (\" %1\" )" ).arg (resultExpr);
46- qCWarning (scopeComm) << msg;
48+ qCWarning (scopeComm) << QString (" Expression evaluation parsing failed (\" %1\" )" ).arg (resultExpr);
4749 }
4850
4951 while (i.hasNext ())
@@ -65,7 +67,7 @@ QString ExpressionParser::processExpression(QString const& graphExpr)
6567 return resultExpr;
6668}
6769
68- bool ExpressionParser::processRegisterExpression (QString regExpr, DataPoint& dataPoint)
70+ bool ExpressionParser::processRegisterExpression (const QString& regExpr, DataPoint& dataPoint)
6971{
7072 static const QRegularExpression regParseRegex (ExpressionRegex::cParseReg);
7173 QRegularExpressionMatch match = regParseRegex.match (regExpr);
@@ -96,20 +98,16 @@ bool ExpressionParser::processRegisterExpression(QString regExpr, DataPoint& dat
9698
9799QString ExpressionParser::constructInternalRegisterFunction (DataPoint const & dataPoint, int size)
98100{
99- quint32 idx;
100- if (_dataPoints.contains (dataPoint))
101- {
102- idx = _dataPoints.indexOf (dataPoint);
103- }
104- else
101+ qsizetype idx = _dataPoints.indexOf (dataPoint);
102+ if (idx < 0 )
105103 {
106104 _dataPoints.append (dataPoint);
107105 idx = _dataPoints.size () - 1 ;
108106 }
109107
110108 /* Add dummy whitespaces to make sure positions in internal representations match visible expressions */
111- QString regIdx = QString ( " %1 " ). arg (idx);
112- const int spacesCount = size - 3 - regIdx.size (); /* ignore ${} and idx string length */
109+ QString regIdx = QString::number (idx);
110+ const int spacesCount = qMax ( 0 , size - 3 - regIdx.size () ); /* ignore ${} and idx string length */
113111 QString spaces = QString (" " ).repeated (spacesCount);
114112
115113 return QString (_cRegisterFunctionTemplate).arg (idx).arg (spaces);
0 commit comments