]> SALOME platform Git repositories - modules/shaper.git/blob - src/ModelHighAPI/ModelHighAPI_Macro.h
Salome HOME
Cleare Macros for easy atribute initialization in C++HighAPI interfaces
[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_2(KIND, \
69                     N_0, AN_0, T_0, C_0, \
70                     N_1, AN_1, T_1, C_1) \
71   public: \
72     INTERFACE_COMMON(KIND) \
73     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
74     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
75   protected: \
76     START_INIT() \
77       SET_ATTRIBUTE(N_0, T_0, AN_0) \
78       SET_ATTRIBUTE(N_1, T_1, AN_1) \
79     END_INIT() \
80   public:
81
82 //--------------------------------------------------------------------------------------
83 #define INTERFACE_3(KIND, \
84                     N_0, AN_0, T_0, C_0, \
85                     N_1, AN_1, T_1, C_1, \
86                     N_2, AN_2, T_2, C_2) \
87   public: \
88     INTERFACE_COMMON(KIND) \
89     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
90     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
91     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
92   protected: \
93     START_INIT() \
94       SET_ATTRIBUTE(N_0, T_0, AN_0) \
95       SET_ATTRIBUTE(N_1, T_1, AN_1) \
96       SET_ATTRIBUTE(N_2, T_2, AN_2) \
97     END_INIT() \
98   public:
99
100 //--------------------------------------------------------------------------------------
101 #define INTERFACE_4(KIND, \
102                     N_0, AN_0, T_0, C_0, \
103                     N_1, AN_1, T_1, C_1, \
104                     N_2, AN_2, T_2, C_2, \
105                     N_3, AN_3, T_3, C_3) \
106   public: \
107     INTERFACE_COMMON(KIND) \
108     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
109     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
110     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
111     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
112   protected: \
113     START_INIT() \
114       SET_ATTRIBUTE(N_0, T_0, AN_0) \
115       SET_ATTRIBUTE(N_1, T_1, AN_1) \
116       SET_ATTRIBUTE(N_2, T_2, AN_2) \
117       SET_ATTRIBUTE(N_3, T_3, AN_3) \
118     END_INIT() \
119   public:
120
121 //--------------------------------------------------------------------------------------
122 #define INTERFACE_5(KIND, \
123                     N_0, AN_0, T_0, C_0, \
124                     N_1, AN_1, T_1, C_1, \
125                     N_2, AN_2, T_2, C_2, \
126                     N_3, AN_3, T_3, C_3, \
127                     N_4, AN_4, T_4, C_4) \
128   public: \
129     INTERFACE_COMMON(KIND) \
130     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
131     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
132     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
133     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
134     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
135   protected: \
136     START_INIT() \
137       SET_ATTRIBUTE(N_0, T_0, AN_0) \
138       SET_ATTRIBUTE(N_1, T_1, AN_1) \
139       SET_ATTRIBUTE(N_2, T_2, AN_2) \
140       SET_ATTRIBUTE(N_3, T_3, AN_3) \
141       SET_ATTRIBUTE(N_4, T_4, AN_4) \
142     END_INIT() \
143   public:
144
145 //--------------------------------------------------------------------------------------
146 #define INTERFACE_6(KIND, \
147                     N_0, AN_0, T_0, C_0, \
148                     N_1, AN_1, T_1, C_1, \
149                     N_2, AN_2, T_2, C_2, \
150                     N_3, AN_3, T_3, C_3, \
151                     N_4, AN_4, T_4, C_4, \
152                     N_5, AN_5, T_5, C_5) \
153   public: \
154     INTERFACE_COMMON(KIND) \
155     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
156     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
157     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
158     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
159     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
160     DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
161   protected: \
162     START_INIT() \
163       SET_ATTRIBUTE(N_0, T_0, AN_0) \
164       SET_ATTRIBUTE(N_1, T_1, AN_1) \
165       SET_ATTRIBUTE(N_2, T_2, AN_2) \
166       SET_ATTRIBUTE(N_3, T_3, AN_3) \
167       SET_ATTRIBUTE(N_4, T_4, AN_4) \
168       SET_ATTRIBUTE(N_5, T_5, AN_5) \
169     END_INIT() \
170   public:
171
172 //--------------------------------------------------------------------------------------
173 #define INTERFACE_7(KIND, \
174                     N_0, AN_0, T_0, C_0, \
175                     N_1, AN_1, T_1, C_1, \
176                     N_2, AN_2, T_2, C_2, \
177                     N_3, AN_3, T_3, C_3, \
178                     N_4, AN_4, T_4, C_4, \
179                     N_5, AN_5, T_5, C_5, \
180                     N_6, AN_6, T_6, C_6) \
181   public: \
182     INTERFACE_COMMON(KIND) \
183     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
184     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
185     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
186     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
187     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
188     DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
189     DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
190   protected: \
191     START_INIT() \
192       SET_ATTRIBUTE(N_0, T_0, AN_0) \
193       SET_ATTRIBUTE(N_1, T_1, AN_1) \
194       SET_ATTRIBUTE(N_2, T_2, AN_2) \
195       SET_ATTRIBUTE(N_3, T_3, AN_3) \
196       SET_ATTRIBUTE(N_4, T_4, AN_4) \
197       SET_ATTRIBUTE(N_5, T_5, AN_5) \
198       SET_ATTRIBUTE(N_6, T_6, AN_6) \
199     END_INIT() \
200   public:
201
202 //--------------------------------------------------------------------------------------
203 #define INTERFACE_8(KIND, \
204                     N_0, AN_0, T_0, C_0, \
205                     N_1, AN_1, T_1, C_1, \
206                     N_2, AN_2, T_2, C_2, \
207                     N_3, AN_3, T_3, C_3, \
208                     N_4, AN_4, T_4, C_4, \
209                     N_5, AN_5, T_5, C_5, \
210                     N_6, AN_6, T_6, C_6, \
211                     N_7, AN_7, T_7, C_7) \
212   public: \
213     INTERFACE_COMMON(KIND) \
214     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
215     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
216     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
217     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
218     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
219     DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
220     DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
221     DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
222   protected: \
223     START_INIT() \
224       SET_ATTRIBUTE(N_0, T_0, AN_0) \
225       SET_ATTRIBUTE(N_1, T_1, AN_1) \
226       SET_ATTRIBUTE(N_2, T_2, AN_2) \
227       SET_ATTRIBUTE(N_3, T_3, AN_3) \
228       SET_ATTRIBUTE(N_4, T_4, AN_4) \
229       SET_ATTRIBUTE(N_5, T_5, AN_5) \
230       SET_ATTRIBUTE(N_6, T_6, AN_6) \
231       SET_ATTRIBUTE(N_7, T_7, AN_7) \
232     END_INIT() \
233   public:
234
235 //--------------------------------------------------------------------------------------
236 #define INTERFACE_9(KIND, \
237                     N_0, AN_0, T_0, C_0, \
238                     N_1, AN_1, T_1, C_1, \
239                     N_2, AN_2, T_2, C_2, \
240                     N_3, AN_3, T_3, C_3, \
241                     N_4, AN_4, T_4, C_4, \
242                     N_5, AN_5, T_5, C_5, \
243                     N_6, AN_6, T_6, C_6, \
244                     N_7, AN_7, T_7, C_7, \
245                     N_8, AN_8, T_8, C_8) \
246   public: \
247     INTERFACE_COMMON(KIND) \
248     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
249     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
250     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
251     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
252     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
253     DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
254     DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
255     DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
256     DEFINE_ATTRIBUTE(N_8, T_8, C_8) \
257   protected: \
258     START_INIT() \
259       SET_ATTRIBUTE(N_0, T_0, AN_0) \
260       SET_ATTRIBUTE(N_1, T_1, AN_1) \
261       SET_ATTRIBUTE(N_2, T_2, AN_2) \
262       SET_ATTRIBUTE(N_3, T_3, AN_3) \
263       SET_ATTRIBUTE(N_4, T_4, AN_4) \
264       SET_ATTRIBUTE(N_5, T_5, AN_5) \
265       SET_ATTRIBUTE(N_6, T_6, AN_6) \
266       SET_ATTRIBUTE(N_7, T_7, AN_7) \
267       SET_ATTRIBUTE(N_8, T_8, AN_8) \
268     END_INIT() \
269   public:
270
271 //--------------------------------------------------------------------------------------
272 #endif /* SRC_MODELHIGHAPI_MODELHIGHAPI_MACRO_H_ */