1 // Name : ModelHighAPI_Macro.h
5 // 27/05/16 - Sergey POKHODENKO - Creation of the file
7 #ifndef SRC_MODELHIGHAPI_MODELHIGHAPI_MACRO_H_
8 #define SRC_MODELHIGHAPI_MODELHIGHAPI_MACRO_H_
10 //--------------------------------------------------------------------------------------
11 #include <ModelAPI_Feature.h>
13 //--------------------------------------------------------------------------------------
14 // See ModelAPI_Feature functions
15 #define FN_ModelAPI_AttributeBoolean boolean
16 #define FN_ModelAPI_AttributeDocRef document
17 #define FN_ModelAPI_AttributeDouble real
18 #define FN_ModelAPI_AttributeInteger integer
19 #define FN_ModelAPI_AttributeRefAttr refattr
20 #define FN_ModelAPI_AttributeReference reference
21 #define FN_ModelAPI_AttributeRefList reflist
22 #define FN_ModelAPI_AttributeSelection selection
23 #define FN_ModelAPI_AttributeSelectionList selectionList
24 #define FN_ModelAPI_AttributeString string
26 //--------------------------------------------------------------------------------------
27 #define VAR_NAME(NAME) my##NAME
29 //--------------------------------------------------------------------------------------
30 // Used in INTERFACE_N for create variable and getter
31 #define DEFINE_ATTRIBUTE(NAME, TYPE, COMMENT) \
33 std::shared_ptr<TYPE> NAME() const { return VAR_NAME(NAME); } \
35 std::shared_ptr<TYPE> VAR_NAME(NAME); \
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)) \
45 //--------------------------------------------------------------------------------------
46 #define INTERFACE_COMMON(KIND) \
47 static std::string ID() { return KIND; }
49 //--------------------------------------------------------------------------------------
50 #define START_INIT() \
53 throwException(ID() + " exception: The feature is NULL."); \
56 if (getKind() != ID()) { \
57 throwException(ID() + " exception: Wrong feature kind."); \
61 //--------------------------------------------------------------------------------------
67 //--------------------------------------------------------------------------------------
68 #define INTERFACE_1(KIND, \
69 N_0, AN_0, T_0, C_0) \
71 INTERFACE_COMMON(KIND) \
72 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
75 SET_ATTRIBUTE(N_0, T_0, AN_0) \
79 //--------------------------------------------------------------------------------------
80 #define INTERFACE_2(KIND, \
81 N_0, AN_0, T_0, C_0, \
82 N_1, AN_1, T_1, C_1) \
84 INTERFACE_COMMON(KIND) \
85 DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
86 DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
89 SET_ATTRIBUTE(N_0, T_0, AN_0) \
90 SET_ATTRIBUTE(N_1, T_1, AN_1) \
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) \
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) \
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) \
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) \
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) \
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) \
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) \
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) \
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) \
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) \
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) \
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) \
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) \
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) \
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) \
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) \
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) \
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) \
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) \
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) \
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) \
283 //--------------------------------------------------------------------------------------
284 #endif /* SRC_MODELHIGHAPI_MODELHIGHAPI_MACRO_H_ */