]> SALOME platform Git repositories - modules/shaper.git/blob - src/ModelHighAPI/ModelHighAPI_Macro.h
Salome HOME
Use not only ModelAPI_Attribute* in INTERFACE_N
[modules/shaper.git] / src / ModelHighAPI / ModelHighAPI_Macro.h
1 // Name   : ModelHighAPI_Macro.h
2 // Purpose:
3 //
4 // History:
5 // 27/05/16 - Sergey POKHODENKO - Creation of the file
6
7 #ifndef SRC_MODELHIGHAPI_MODELHIGHAPI_MACRO_H_
8 #define SRC_MODELHIGHAPI_MODELHIGHAPI_MACRO_H_
9
10 //--------------------------------------------------------------------------------------
11 #include <ModelAPI_AttributeBoolean.h>
12 #include <ModelAPI_AttributeDocRef.h>
13 #include <ModelAPI_AttributeDouble.h>
14 #include <ModelAPI_AttributeIntArray.h>
15 #include <ModelAPI_AttributeInteger.h>
16 #include <ModelAPI_AttributeRefAttr.h>
17 #include <ModelAPI_AttributeRefAttrList.h>
18 #include <ModelAPI_AttributeReference.h>
19 #include <ModelAPI_AttributeRefList.h>
20 #include <ModelAPI_AttributeSelection.h>
21 #include <ModelAPI_AttributeSelectionList.h>
22 #include <ModelAPI_AttributeString.h>
23 #include <ModelAPI_Feature.h>
24
25 //--------------------------------------------------------------------------------------
26 #define VAR_NAME(NAME) my##NAME
27
28 //--------------------------------------------------------------------------------------
29 // Used in INTERFACE_N for create variable and getter
30 #define DEFINE_ATTRIBUTE(NAME, TYPE, COMMENT) \
31     COMMENT \
32     std::shared_ptr<TYPE> NAME() const { return VAR_NAME(NAME); } \
33   protected: \
34     std::shared_ptr<TYPE> VAR_NAME(NAME); \
35   public:
36
37 //--------------------------------------------------------------------------------------
38 // Used in INTERFACE_N inside START_INIT/END_INIT for set variable with attribute received from feature
39 #define SET_ATTRIBUTE(NAME, TYPE, ATT_NAME) \
40   VAR_NAME(NAME) = std::dynamic_pointer_cast<TYPE>(feature()->attribute(ATT_NAME)); \
41   if (!VAR_NAME(NAME)) \
42     return false;
43
44 //--------------------------------------------------------------------------------------
45 #define INTERFACE_COMMON(KIND) \
46   static std::string ID() { return KIND; }
47
48 //--------------------------------------------------------------------------------------
49 #define START_INIT() \
50   bool initialize() { \
51     if (!feature()) { \
52       throwException(ID() + " exception: The feature is NULL."); \
53       return false; \
54     } \
55     if (getKind() != ID()) { \
56       throwException(ID() + " exception: Wrong feature kind."); \
57       return false; \
58     }
59
60 //--------------------------------------------------------------------------------------
61 #define END_INIT() \
62     return true; \
63   }
64
65
66 //--------------------------------------------------------------------------------------
67 #define INTERFACE_1(KIND, \
68                     N_0, AN_0, T_0, C_0) \
69   public: \
70     INTERFACE_COMMON(KIND) \
71     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
72   protected: \
73     START_INIT() \
74       SET_ATTRIBUTE(N_0, T_0, AN_0) \
75     END_INIT() \
76   public:
77
78 //--------------------------------------------------------------------------------------
79 #define INTERFACE_2(KIND, \
80                     N_0, AN_0, T_0, C_0, \
81                     N_1, AN_1, T_1, C_1) \
82   public: \
83     INTERFACE_COMMON(KIND) \
84     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
85     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
86   protected: \
87     START_INIT() \
88       SET_ATTRIBUTE(N_0, T_0, AN_0) \
89       SET_ATTRIBUTE(N_1, T_1, AN_1) \
90     END_INIT() \
91   public:
92
93 //--------------------------------------------------------------------------------------
94 #define INTERFACE_3(KIND, \
95                     N_0, AN_0, T_0, C_0, \
96                     N_1, AN_1, T_1, C_1, \
97                     N_2, AN_2, T_2, C_2) \
98   public: \
99     INTERFACE_COMMON(KIND) \
100     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
101     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
102     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
103   protected: \
104     START_INIT() \
105       SET_ATTRIBUTE(N_0, T_0, AN_0) \
106       SET_ATTRIBUTE(N_1, T_1, AN_1) \
107       SET_ATTRIBUTE(N_2, T_2, AN_2) \
108     END_INIT() \
109   public:
110
111 //--------------------------------------------------------------------------------------
112 #define INTERFACE_4(KIND, \
113                     N_0, AN_0, T_0, C_0, \
114                     N_1, AN_1, T_1, C_1, \
115                     N_2, AN_2, T_2, C_2, \
116                     N_3, AN_3, T_3, C_3) \
117   public: \
118     INTERFACE_COMMON(KIND) \
119     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
120     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
121     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
122     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
123   protected: \
124     START_INIT() \
125       SET_ATTRIBUTE(N_0, T_0, AN_0) \
126       SET_ATTRIBUTE(N_1, T_1, AN_1) \
127       SET_ATTRIBUTE(N_2, T_2, AN_2) \
128       SET_ATTRIBUTE(N_3, T_3, AN_3) \
129     END_INIT() \
130   public:
131
132 //--------------------------------------------------------------------------------------
133 #define INTERFACE_5(KIND, \
134                     N_0, AN_0, T_0, C_0, \
135                     N_1, AN_1, T_1, C_1, \
136                     N_2, AN_2, T_2, C_2, \
137                     N_3, AN_3, T_3, C_3, \
138                     N_4, AN_4, T_4, C_4) \
139   public: \
140     INTERFACE_COMMON(KIND) \
141     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
142     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
143     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
144     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
145     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
146   protected: \
147     START_INIT() \
148       SET_ATTRIBUTE(N_0, T_0, AN_0) \
149       SET_ATTRIBUTE(N_1, T_1, AN_1) \
150       SET_ATTRIBUTE(N_2, T_2, AN_2) \
151       SET_ATTRIBUTE(N_3, T_3, AN_3) \
152       SET_ATTRIBUTE(N_4, T_4, AN_4) \
153     END_INIT() \
154   public:
155
156 //--------------------------------------------------------------------------------------
157 #define INTERFACE_6(KIND, \
158                     N_0, AN_0, T_0, C_0, \
159                     N_1, AN_1, T_1, C_1, \
160                     N_2, AN_2, T_2, C_2, \
161                     N_3, AN_3, T_3, C_3, \
162                     N_4, AN_4, T_4, C_4, \
163                     N_5, AN_5, T_5, C_5) \
164   public: \
165     INTERFACE_COMMON(KIND) \
166     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
167     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
168     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
169     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
170     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
171     DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
172   protected: \
173     START_INIT() \
174       SET_ATTRIBUTE(N_0, T_0, AN_0) \
175       SET_ATTRIBUTE(N_1, T_1, AN_1) \
176       SET_ATTRIBUTE(N_2, T_2, AN_2) \
177       SET_ATTRIBUTE(N_3, T_3, AN_3) \
178       SET_ATTRIBUTE(N_4, T_4, AN_4) \
179       SET_ATTRIBUTE(N_5, T_5, AN_5) \
180     END_INIT() \
181   public:
182
183 //--------------------------------------------------------------------------------------
184 #define INTERFACE_7(KIND, \
185                     N_0, AN_0, T_0, C_0, \
186                     N_1, AN_1, T_1, C_1, \
187                     N_2, AN_2, T_2, C_2, \
188                     N_3, AN_3, T_3, C_3, \
189                     N_4, AN_4, T_4, C_4, \
190                     N_5, AN_5, T_5, C_5, \
191                     N_6, AN_6, T_6, C_6) \
192   public: \
193     INTERFACE_COMMON(KIND) \
194     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
195     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
196     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
197     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
198     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
199     DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
200     DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
201   protected: \
202     START_INIT() \
203       SET_ATTRIBUTE(N_0, T_0, AN_0) \
204       SET_ATTRIBUTE(N_1, T_1, AN_1) \
205       SET_ATTRIBUTE(N_2, T_2, AN_2) \
206       SET_ATTRIBUTE(N_3, T_3, AN_3) \
207       SET_ATTRIBUTE(N_4, T_4, AN_4) \
208       SET_ATTRIBUTE(N_5, T_5, AN_5) \
209       SET_ATTRIBUTE(N_6, T_6, AN_6) \
210     END_INIT() \
211   public:
212
213 //--------------------------------------------------------------------------------------
214 #define INTERFACE_8(KIND, \
215                     N_0, AN_0, T_0, C_0, \
216                     N_1, AN_1, T_1, C_1, \
217                     N_2, AN_2, T_2, C_2, \
218                     N_3, AN_3, T_3, C_3, \
219                     N_4, AN_4, T_4, C_4, \
220                     N_5, AN_5, T_5, C_5, \
221                     N_6, AN_6, T_6, C_6, \
222                     N_7, AN_7, T_7, C_7) \
223   public: \
224     INTERFACE_COMMON(KIND) \
225     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
226     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
227     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
228     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
229     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
230     DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
231     DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
232     DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
233   protected: \
234     START_INIT() \
235       SET_ATTRIBUTE(N_0, T_0, AN_0) \
236       SET_ATTRIBUTE(N_1, T_1, AN_1) \
237       SET_ATTRIBUTE(N_2, T_2, AN_2) \
238       SET_ATTRIBUTE(N_3, T_3, AN_3) \
239       SET_ATTRIBUTE(N_4, T_4, AN_4) \
240       SET_ATTRIBUTE(N_5, T_5, AN_5) \
241       SET_ATTRIBUTE(N_6, T_6, AN_6) \
242       SET_ATTRIBUTE(N_7, T_7, AN_7) \
243     END_INIT() \
244   public:
245
246 //--------------------------------------------------------------------------------------
247 #define INTERFACE_9(KIND, \
248                     N_0, AN_0, T_0, C_0, \
249                     N_1, AN_1, T_1, C_1, \
250                     N_2, AN_2, T_2, C_2, \
251                     N_3, AN_3, T_3, C_3, \
252                     N_4, AN_4, T_4, C_4, \
253                     N_5, AN_5, T_5, C_5, \
254                     N_6, AN_6, T_6, C_6, \
255                     N_7, AN_7, T_7, C_7, \
256                     N_8, AN_8, T_8, C_8) \
257   public: \
258     INTERFACE_COMMON(KIND) \
259     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
260     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
261     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
262     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
263     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
264     DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
265     DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
266     DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
267     DEFINE_ATTRIBUTE(N_8, T_8, C_8) \
268   protected: \
269     START_INIT() \
270       SET_ATTRIBUTE(N_0, T_0, AN_0) \
271       SET_ATTRIBUTE(N_1, T_1, AN_1) \
272       SET_ATTRIBUTE(N_2, T_2, AN_2) \
273       SET_ATTRIBUTE(N_3, T_3, AN_3) \
274       SET_ATTRIBUTE(N_4, T_4, AN_4) \
275       SET_ATTRIBUTE(N_5, T_5, AN_5) \
276       SET_ATTRIBUTE(N_6, T_6, AN_6) \
277       SET_ATTRIBUTE(N_7, T_7, AN_7) \
278       SET_ATTRIBUTE(N_8, T_8, AN_8) \
279     END_INIT() \
280   public:
281
282 //--------------------------------------------------------------------------------------
283 #endif /* SRC_MODELHIGHAPI_MODELHIGHAPI_MACRO_H_ */