Salome HOME
Issue #1834: Fix length of lines
[modules/shaper.git] / src / ModelAPI / ModelAPI_Expression.h
1 // Copyright (C) 2014-20xx CEA/DEN, EDF R&D
2
3 // File:        ModelAPI_Expression.h
4 // Created:     5 Aug 2015
5 // Author:      Sergey POKHODENKO
6
7 #ifndef ModelAPI_Expression_H_
8 #define ModelAPI_Expression_H_
9
10 #include "ModelAPI.h"
11
12 #include <memory>
13 #include <set>
14 #include <string>
15
16 /**\class ModelAPI_Expression
17  * \ingroup DataModel
18  * \brief Expression for calculated values.
19  */
20 class ModelAPI_Expression
21 {
22  public:
23   /// To virtually destroy the fields of successors
24   MODELAPI_EXPORT virtual ~ModelAPI_Expression();
25
26   /// Returns true if attribute was initialized by some value
27   MODELAPI_EXPORT virtual bool isInitialized();
28
29   /// Makes attribute initialized
30   MODELAPI_EXPORT virtual void setInitialized();
31
32   /// Sets the text of this Expression
33   MODELAPI_EXPORT virtual void setText(const std::string& theText) = 0;
34
35   /// Returns the text of this Expression
36   MODELAPI_EXPORT virtual std::string text() const = 0;
37
38   /// Allows to set expression (text) as invalid (by the parameters listener)
39   MODELAPI_EXPORT virtual void setInvalid(const bool theFlag) = 0;
40
41   /// Returns true if text is invalid
42   MODELAPI_EXPORT virtual bool isInvalid() = 0;
43
44   /// Allows to set expression (text) error (by the parameters listener)
45   MODELAPI_EXPORT virtual void setError(const std::string& theError) = 0;
46
47   /// Returns an expression error
48   MODELAPI_EXPORT virtual std::string error() = 0;
49
50   /// Defines the used parameters (by the parameters listener)
51   MODELAPI_EXPORT virtual 
52     void setUsedParameters(const std::set<std::string>& theUsedParameters) = 0;
53
54   /// Returns the used parameters
55   MODELAPI_EXPORT virtual std::set<std::string> usedParameters() const = 0;
56
57   /// Returns True if the given string can be defined as a name of an expression variable
58   MODELAPI_EXPORT static bool isVariable(const std::string& theString);
59
60  protected:
61   /// Objects are created for features automatically
62   MODELAPI_EXPORT ModelAPI_Expression();
63   /// Reinitializes the internal state of the attribute (may be needed on undo/redo, abort, etc)
64   MODELAPI_EXPORT virtual void reinit() = 0;
65
66   bool myIsInitialized; ///< is some value assigned to this attribute
67
68   friend class Model_Data;
69   friend class Model_AttributeDouble;
70   friend class Model_AttributeInteger;
71   friend class GeomData_Point;
72   friend class GeomData_Point2D;
73 };
74
75
76 /**\class ModelAPI_ExpressionDouble
77  * \ingroup DataModel
78  * \brief Expression for calculated double values.
79  */
80 class ModelAPI_ExpressionDouble : public virtual ModelAPI_Expression
81 {
82  public:
83   /// Defines the double value
84   MODELAPI_EXPORT virtual void setValue(const double theValue) = 0;
85
86   /// Returns the double value
87   MODELAPI_EXPORT virtual double value() = 0;
88
89  protected:
90   /// Objects are created for features automatically
91   MODELAPI_EXPORT ModelAPI_ExpressionDouble();
92
93   friend class Model_Data;
94 };
95
96
97 /**\class ModelAPI_ExpressionInteger
98  * \ingroup DataModel
99  * \brief Expression for calculated integer values.
100  */
101 class ModelAPI_ExpressionInteger : public virtual ModelAPI_Expression
102 {
103  public:
104   /// Defines the integer value
105   MODELAPI_EXPORT virtual void setValue(const int theValue) = 0;
106
107   /// Returns the integer value
108   MODELAPI_EXPORT virtual int value() = 0;
109
110  protected:
111   /// Objects are created for features automatically
112   MODELAPI_EXPORT ModelAPI_ExpressionInteger();
113
114   friend class Model_Data;
115 };
116
117
118 //! Smart pointers for objects
119 typedef std::shared_ptr<ModelAPI_Expression> ExpressionPtr;
120 typedef std::shared_ptr<ModelAPI_ExpressionDouble> ExpressionDoublePtr;
121 typedef std::shared_ptr<ModelAPI_ExpressionInteger> ExpressionIntegerPtr;
122
123 #endif