Version: 9.16.0
QtxEvalExpr.h
Go to the documentation of this file.
1// Copyright (C) 2007-2026 CEA, EDF, OPEN CASCADE
2//
3// This library is free software; you can redistribute it and/or
4// modify it under the terms of the GNU Lesser General Public
5// License as published by the Free Software Foundation; either
6// version 2.1 of the License, or (at your option) any later version.
7//
8// This library is distributed in the hope that it will be useful,
9// but WITHOUT ANY WARRANTY; without even the implied warranty of
10// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11// Lesser General Public License for more details.
12//
13// You should have received a copy of the GNU Lesser General Public
14// License along with this library; if not, write to the Free Software
15// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16//
17// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18//
19
20// File: QtxEvalExpr.h
21// Author: Alexander SOLOVYOV, Sergey TELKOV
22//
23#ifndef QTXEVALEXPR_H
24#define QTXEVALEXPR_H
25
26#include "Qtx.h"
27
28#include <QList>
29#include <QVariant>
30
31#ifdef WIN32
32#pragma warning( disable:4251 )
33#endif
34
35class QtxEvalSet;
36class QtxEvalParser;
37
39{
40public:
42 typedef enum
43 {
54 ExcessData
55 } Error;
56
57public:
58 QtxEvalExpr( const QString& = QString() );
59 QtxEvalExpr( const bool, const QString& = QString() );
61
62 QVariant calculate( const QString& = QString() );
63
64 QString expression() const;
65 void setExpression( const QString& );
66
67 Error error() const;
68 QtxEvalParser* parser() const;
69
70 bool autoDeleteOperationSets() const;
71 void setAutoDeleteOperationSets( const bool );
72
73 QList<QtxEvalSet*> operationSets() const;
74 QtxEvalSet* operationSet( const QString& ) const;
75 void removeOperationSet( QtxEvalSet* );
76 void insertOperationSet( QtxEvalSet*, const int = -1 );
77
78private:
79 void intialize( const bool, const QString& );
80
81private:
82 QString myExpr;
84};
85
87{
88public:
90 virtual ~QtxEvalParser();
91
92 QVariant calculate();
93 QVariant calculate( const QString& );
94 bool setExpression( const QString& );
95
96 QList<QtxEvalSet*> operationSets() const;
97 QtxEvalSet* operationSet( const QString& ) const;
98 void removeOperationSet( QtxEvalSet* );
99 void insertOperationSet( QtxEvalSet*, const int = -1 );
100
101 bool autoDeleteOperationSets() const;
102 void setAutoDeleteOperationSets( const bool );
103
104 virtual void clearParameters();
105 virtual bool removeParameter( const QString& name );
106 virtual QVariant parameter( const QString& name ) const;
107 virtual bool hasParameter( const QString& name ) const;
108 virtual void setParameter( const QString& name, const QVariant& value );
109 QStringList parameters() const;
110
111 QtxEvalExpr::Error error() const;
112
113 bool firstInvalid( QString& ) const;
114 void removeInvalids();
115 QString dump() const;
116
117 static QString toString( const QList<QVariant>& );
118
119protected:
121 typedef enum
122 {
129 Binary
130 } PostfixItemType;
131
133 typedef struct
134 {
135 QVariant myValue;
137 } PostfixItem;
138
141 typedef QMap<QString, QVariant> ParamMap;
142
143protected:
144 QString dump( const Postfix& ) const;
145 virtual bool prepare( const QString&, Postfix& );
146 virtual bool setOperationTypes( Postfix& );
147 virtual bool sort( const Postfix&, Postfix&, const QStringList&,
148 const QStringList&, int f = -1, int l = -1 );
149
150 virtual bool parse( const QString& );
151 virtual void setError( const QtxEvalExpr::Error );
152
153 bool calculate( const QString&, QVariant&, QVariant& );
154
155 static int search( const QStringList&, const QString&,
156 int offset, int& matchLen, int& listind );
157 static QString note( const QString& str, int pos, int len );
158 static int globalBrackets( const Postfix&, int, int );
159
160private:
161 void operationList( QStringList& ) const;
162 void bracketsList( QStringList&, bool ) const;
163 bool createValue( const QString&, QVariant& ) const;
164 int priority( const QString&, bool isBin ) const;
165 QtxEvalExpr::Error isValid( const QString&,
166 const QVariant::Type, const QVariant::Type ) const;
167 QtxEvalExpr::Error calculation( const QString&, QVariant&, QVariant& ) const;
168
169 bool checkOperations() const;
170
171private:
177};
178
180{
181public:
182 QtxEvalSet();
183 virtual ~QtxEvalSet();
184
185 virtual QString name() const = 0;
186
187 virtual void operationList( QStringList& ) const = 0;
188
189 virtual void bracketsList( QStringList&, bool open ) const = 0;
190
191 virtual bool createValue( const QString&, QVariant& ) const;
192
193 virtual int priority( const QString&, bool isBin ) const = 0;
194
195 virtual QtxEvalExpr::Error isValid( const QString&, const QVariant::Type,
196 const QVariant::Type ) const = 0;
197
198 virtual QtxEvalExpr::Error calculate( const QString&, QVariant&, QVariant& ) const = 0;
199};
200
202{
203public:
205 virtual ~QtxEvalSetBase();
206
207 virtual void operationList( QStringList& ) const;
208 virtual void bracketsList( QStringList&, bool open ) const;
209
210 virtual QtxEvalExpr::Error isValid( const QString&, const QVariant::Type,
211 const QVariant::Type ) const;
212protected:
214
215 void addTypes( const ListOfTypes& );
216 void addOperations( const QStringList& );
217
218private:
219 QStringList myOpers;
221};
222
224{
225public:
227 virtual ~QtxEvalSetArithmetic();
228
229 virtual bool createValue( const QString&, QVariant& ) const;
230 virtual int priority( const QString&, bool isBin ) const;
231 virtual QtxEvalExpr::Error calculate( const QString&, QVariant&, QVariant& ) const;
232
233 static QString Name();
234 virtual QString name() const;
235};
236
238{
239public:
241 virtual ~QtxEvalSetLogic();
242
243 virtual bool createValue( const QString&, QVariant& ) const;
244 virtual int priority( const QString&, bool isBin ) const;
245 virtual QtxEvalExpr::Error calculate( const QString&, QVariant&, QVariant& ) const;
246
247 static QString Name();
248 virtual QString name() const;
249
250private:
251 int intValue( const QVariant& v ) const;
252};
253
255{
256public:
258 virtual ~QtxEvalSetMath();
259
260 virtual bool createValue( const QString&, QVariant& ) const;
261 virtual int priority( const QString&, bool isBin ) const;
262 virtual QtxEvalExpr::Error calculate( const QString&, QVariant&, QVariant& ) const;
263
264 static QString Name();
265 virtual QString name() const;
266};
267
269{
270public:
272 virtual ~QtxEvalSetString();
273
274 virtual bool createValue( const QString&, QVariant& ) const;
275 virtual int priority( const QString&, bool isBin ) const;
276 virtual QtxEvalExpr::Error calculate( const QString&, QVariant&, QVariant& ) const;
277
278 static QString Name();
279 virtual QString name() const;
280};
281
283{
284public:
286
287public:
289 virtual ~QtxEvalSetSets();
290
291 virtual void bracketsList( QStringList&, bool open ) const;
292 virtual int priority( const QString&, bool isBin ) const;
293 virtual QtxEvalExpr::Error isValid( const QString&, const QVariant::Type,
294 const QVariant::Type ) const;
295 virtual QtxEvalExpr::Error calculate( const QString&, QVariant&, QVariant& ) const;
296
297 static void add( ValueSet&, const QVariant& );
298 static void add( ValueSet&, const ValueSet& );
299 static void remove( ValueSet&, const QVariant& );
300 static void remove( ValueSet&, const ValueSet& );
301
302 static QString Name();
303 virtual QString name() const;
304};
305
307{
308public:
310 virtual ~QtxEvalSetConst();
311
312 static QString Name();
313 virtual QString name() const;
314
315 virtual bool createValue( const QString&, QVariant& ) const;
316
317 virtual void operationList( QStringList& ) const;
318 virtual void bracketsList( QStringList&, bool open ) const;
319 virtual int priority( const QString&, bool isBin ) const;
320 virtual QtxEvalExpr::Error isValid( const QString&, const QVariant::Type,
321 const QVariant::Type ) const;
322 virtual QtxEvalExpr::Error calculate( const QString&, QVariant&, QVariant& ) const;
323};
324
325#endif // QTXEVALEXPR_H
#define QTX_EXPORT
Definition: Qtx.h:36
bool isValid(const QPolygon *thePoints, const QPoint &theCurrent)
Definition: SVTK_InteractorStyle.cxx:1762
String expression evaluator.
Definition: QtxEvalExpr.h:39
QtxEvalParser * myParser
Definition: QtxEvalExpr.h:83
QString myExpr
Definition: QtxEvalExpr.h:82
Error
Parsing error type.
Definition: QtxEvalExpr.h:43
@ OperandsNotMatch
Types of arguments are invalid for this operation.
Definition: QtxEvalExpr.h:45
@ StackUnderflow
There are no arguments in the stack for the operation.
Definition: QtxEvalExpr.h:53
@ InvalidToken
Invalid token (neither operation, nor parameter of value)
Definition: QtxEvalExpr.h:49
@ InvalidResult
Operation cannot find result (for example, division by zero)
Definition: QtxEvalExpr.h:46
@ CloseExpected
Closing bracket is expected.
Definition: QtxEvalExpr.h:50
@ ExcessClose
Extra closing bracket is found.
Definition: QtxEvalExpr.h:51
@ BracketsNotMatch
Opening and closing brackets are of different type, e.g. [)
Definition: QtxEvalExpr.h:52
@ OK
No errors found.
Definition: QtxEvalExpr.h:44
@ OperationsNull
Internal operations pointer of parser is null.
Definition: QtxEvalExpr.h:48
@ InvalidOperation
Unknown operation.
Definition: QtxEvalExpr.h:47
Expression parser.
Definition: QtxEvalExpr.h:87
QtxEvalExpr::Error myError
Definition: QtxEvalExpr.h:173
ParamMap myParams
Definition: QtxEvalExpr.h:174
QList< PostfixItem > Postfix
postfix representation
Definition: QtxEvalExpr.h:139
QList< QtxEvalSet * > SetList
list of operations
Definition: QtxEvalExpr.h:140
PostfixItemType
Types of postfix representation elements.
Definition: QtxEvalExpr.h:122
@ Value
Value (number, string, etc.)
Definition: QtxEvalExpr.h:123
@ Param
Parameter.
Definition: QtxEvalExpr.h:124
@ Close
Close bracket.
Definition: QtxEvalExpr.h:126
@ Post
Unary postfix operation.
Definition: QtxEvalExpr.h:128
@ Pre
Unary prefix operation.
Definition: QtxEvalExpr.h:127
@ Open
Open bracket.
Definition: QtxEvalExpr.h:125
Postfix myPostfix
Definition: QtxEvalExpr.h:175
bool myAutoDel
Definition: QtxEvalExpr.h:176
SetList mySets
Definition: QtxEvalExpr.h:172
QMap< QString, QVariant > ParamMap
parameter-to-value map
Definition: QtxEvalExpr.h:141
Provides set of arithmetical operations for the parser.
Definition: QtxEvalExpr.h:224
Generic class. Provides functionality for standard operations sets.
Definition: QtxEvalExpr.h:202
ListOfTypes myTypes
Definition: QtxEvalExpr.h:220
QStringList myOpers
Definition: QtxEvalExpr.h:219
QList< QVariant::Type > ListOfTypes
Definition: QtxEvalExpr.h:213
Provides different standard constants.
Definition: QtxEvalExpr.h:307
Provides set of logical operations for the parser.
Definition: QtxEvalExpr.h:238
Provides a set of more complex operations (mathematical functions) for the parser (sqrt,...
Definition: QtxEvalExpr.h:255
Provides set of operations with sequences for the parser.
Definition: QtxEvalExpr.h:283
QList< QVariant > ValueSet
Definition: QtxEvalExpr.h:285
Provides set of string operations for the parser.
Definition: QtxEvalExpr.h:269
Generic class for all the operations sets used in expressions.
Definition: QtxEvalExpr.h:180
virtual QString name() const =0
Get unique operations set name.
virtual QtxEvalExpr::Error isValid(const QString &, const QVariant::Type, const QVariant::Type) const =0
Check operation validity.
virtual void operationList(QStringList &) const =0
Get the list of possible operations.
virtual QtxEvalExpr::Error calculate(const QString &, QVariant &, QVariant &) const =0
Calculate the operation.
virtual void bracketsList(QStringList &, bool open) const =0
Get list of brackets.
virtual int priority(const QString &, bool isBin) const =0
Get the operation priority.
int Type
Definition: VTKViewer_Actor.h:62
Postfix representation element.
Definition: QtxEvalExpr.h:134
QVariant myValue
Definition: QtxEvalExpr.h:135
PostfixItemType myType
Definition: QtxEvalExpr.h:136