Kactus2
Kactus2 reference guide
Loading...
Searching...
No Matches
ModeConditionParser.h
Go to the documentation of this file.
1//-----------------------------------------------------------------------------
2// File: ModeConditionParser.h
3//-----------------------------------------------------------------------------
4// Project: Kactus2
5// Author: Esko Pekkarinen
6// Date: 16.10.2023
7//
8// Description:
9// Parser for Mode condition expressions.
10//-----------------------------------------------------------------------------
11
12#ifndef MODECONDITIONPARSER_H
13#define MODECONDITIONPARSER_H
14
16
17#include "KactusAPI/KactusAPIGlobal.h"
18
19#include <IPXACTmodels/Component/Mode.h>
20
21#include <IPXACTmodels/utilities/Search.h>
22
23#include <QString>
24#include <QMap>
25
26//-----------------------------------------------------------------------------
28//-----------------------------------------------------------------------------
30{
31public:
32
34 ModeConditionParser(QSharedPointer<ParameterFinder> finder,
35 PortSlice::List portSlices,
36 FieldSlice::List fieldSlices,
37 Mode::List modes);
38
40 ~ModeConditionParser() override = default;
41
42 // Disable copying.
45
51 void setFieldSlices(FieldSlice::List fieldSlices);
52
58 void setPortSlices(PortSlice::List portSlices);
59
65 void setModes(Mode::List modes);
66
67protected:
68
76 bool isSymbol(QStringView expression) const final;
77
85 QString findSymbolValue(QStringView symbol) const override;
86
94 bool isUnaryOperator(QStringView token) const final;
95
104 QString solveUnary(QStringView operation, QString const& term) const final;
105
106private:
107
115 bool isModeReference(QStringView expression) const;
116
117
126 template <typename T>
127 QString solveCondition(QStringView reference, QSharedPointer<QList<QSharedPointer<T> > > availableItems) const
128 {
129 if (auto item = Search::findByName(reference, *availableItems); item.isNull())
130 {
131 return QStringLiteral("x");
132 }
133
134 return QStringLiteral("1");
135 };
136
138 PortSlice::List portSlices_;
139
141 FieldSlice::List fieldSlices_;
142
144 Mode::List modes_;
145};
146
147#endif // MODECONDITIONPARSER_H
IPXactSystemVerilogParser(QSharedPointer< ParameterFinder > finder)
ModeConditionParser & operator=(ModeConditionParser const &rhs)=delete
~ModeConditionParser() override=default
The destructor.
void setFieldSlices(FieldSlice::List fieldSlices)
ModeConditionParser(QSharedPointer< ParameterFinder > finder, PortSlice::List portSlices, FieldSlice::List fieldSlices, Mode::List modes)
The constructor.
QString solveUnary(QStringView operation, QString const &term) const final
ModeConditionParser(ModeConditionParser const &rhs)=delete
QString findSymbolValue(QStringView symbol) const override
bool isUnaryOperator(QStringView token) const final
void setPortSlices(PortSlice::List portSlices)
void setModes(Mode::List modes)
bool isSymbol(QStringView expression) const final