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