Salome HOME
Issue #2024: Redesign of circle and arc of circle
[modules/shaper.git] / src / ModelHighAPI / ModelHighAPI_Macro.h
1 // Copyright (C) 2014-20xx CEA/DEN, EDF R&D
2 // Name   : ModelHighAPI_Macro.h
3 // Purpose:
4 //
5 // History:
6 // 27/05/16 - Sergey POKHODENKO - Creation of the file
7
8 #ifndef SRC_MODELHIGHAPI_MODELHIGHAPI_MACRO_H_
9 #define SRC_MODELHIGHAPI_MODELHIGHAPI_MACRO_H_
10
11 //--------------------------------------------------------------------------------------
12 #include <GeomDataAPI_Dir.h>
13 #include <GeomDataAPI_Point.h>
14 #include <GeomDataAPI_Point2D.h>
15 //--------------------------------------------------------------------------------------
16 #include <ModelAPI_AttributeBoolean.h>
17 #include <ModelAPI_AttributeDocRef.h>
18 #include <ModelAPI_AttributeDouble.h>
19 #include <ModelAPI_AttributeIntArray.h>
20 #include <ModelAPI_AttributeInteger.h>
21 #include <ModelAPI_AttributeRefAttr.h>
22 #include <ModelAPI_AttributeRefAttrList.h>
23 #include <ModelAPI_AttributeReference.h>
24 #include <ModelAPI_AttributeRefList.h>
25 #include <ModelAPI_AttributeSelection.h>
26 #include <ModelAPI_AttributeSelectionList.h>
27 #include <ModelAPI_AttributeString.h>
28 #include <ModelAPI_Feature.h>
29
30 //--------------------------------------------------------------------------------------
31 #define VAR_NAME(NAME) my##NAME
32
33 //--------------------------------------------------------------------------------------
34 #define TO_STRING_(NAME) #NAME
35 #define TO_STRING(NAME) TO_STRING_(NAME)
36
37 //--------------------------------------------------------------------------------------
38 // Used in INTERFACE_N for create variable and getter
39 #define DEFINE_ATTRIBUTE(NAME, TYPE, COMMENT) \
40     COMMENT \
41     std::shared_ptr<TYPE> NAME() const { return VAR_NAME(NAME); } \
42   protected: \
43     std::shared_ptr<TYPE> VAR_NAME(NAME); \
44   public:
45
46 //--------------------------------------------------------------------------------------
47 // Used in INTERFACE_N inside START_INIT/END_INIT for
48 // set variable with attribute received from feature
49 #define SET_ATTRIBUTE(NAME, TYPE, ATT_NAME) \
50   VAR_NAME(NAME) = std::dynamic_pointer_cast<TYPE>(feature()->attribute(ATT_NAME)); \
51   if (!VAR_NAME(NAME)) \
52     return false; \
53   myAttrGetter[ATT_NAME] = TO_STRING(NAME);
54
55 //--------------------------------------------------------------------------------------
56 #define INTERFACE_COMMON(KIND) \
57   static std::string ID() { return KIND; }\
58   virtual std::string getID() { return ID(); }
59
60 //--------------------------------------------------------------------------------------
61 #define START_INIT() \
62   bool initialize() { \
63     if (!feature()) { \
64       throwException(ID() + " exception: The feature is NULL."); \
65       return false; \
66     } \
67     if (getKind() != getID()) { \
68       throwException(ID() + " exception: Wrong feature kind."); \
69       return false; \
70     }
71
72 //--------------------------------------------------------------------------------------
73 #define END_INIT() \
74     return true; \
75   }
76
77 //--------------------------------------------------------------------------------------
78 #define INTERFACE_0(KIND) \
79   public: \
80     INTERFACE_COMMON(KIND) \
81   protected: \
82     START_INIT() \
83     END_INIT() \
84   public:
85
86 //--------------------------------------------------------------------------------------
87 #define INTERFACE_1(KIND, \
88                     N_0, AN_0, T_0, C_0) \
89   public: \
90     INTERFACE_COMMON(KIND) \
91     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
92   protected: \
93     START_INIT() \
94       SET_ATTRIBUTE(N_0, T_0, AN_0) \
95     END_INIT() \
96   public:
97
98 //--------------------------------------------------------------------------------------
99 #define INTERFACE_2(KIND, \
100                     N_0, AN_0, T_0, C_0, \
101                     N_1, AN_1, T_1, C_1) \
102   public: \
103     INTERFACE_COMMON(KIND) \
104     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
105     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
106   protected: \
107     START_INIT() \
108       SET_ATTRIBUTE(N_0, T_0, AN_0) \
109       SET_ATTRIBUTE(N_1, T_1, AN_1) \
110     END_INIT() \
111   public:
112
113 //--------------------------------------------------------------------------------------
114 #define INTERFACE_3(KIND, \
115                     N_0, AN_0, T_0, C_0, \
116                     N_1, AN_1, T_1, C_1, \
117                     N_2, AN_2, T_2, C_2) \
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   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     END_INIT() \
129   public:
130
131 //--------------------------------------------------------------------------------------
132 #define INTERFACE_4(KIND, \
133                     N_0, AN_0, T_0, C_0, \
134                     N_1, AN_1, T_1, C_1, \
135                     N_2, AN_2, T_2, C_2, \
136                     N_3, AN_3, T_3, C_3) \
137   public: \
138     INTERFACE_COMMON(KIND) \
139     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
140     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
141     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
142     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
143   protected: \
144     START_INIT() \
145       SET_ATTRIBUTE(N_0, T_0, AN_0) \
146       SET_ATTRIBUTE(N_1, T_1, AN_1) \
147       SET_ATTRIBUTE(N_2, T_2, AN_2) \
148       SET_ATTRIBUTE(N_3, T_3, AN_3) \
149     END_INIT() \
150   public:
151
152 //--------------------------------------------------------------------------------------
153 #define INTERFACE_5(KIND, \
154                     N_0, AN_0, T_0, C_0, \
155                     N_1, AN_1, T_1, C_1, \
156                     N_2, AN_2, T_2, C_2, \
157                     N_3, AN_3, T_3, C_3, \
158                     N_4, AN_4, T_4, C_4) \
159   public: \
160     INTERFACE_COMMON(KIND) \
161     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
162     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
163     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
164     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
165     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
166   protected: \
167     START_INIT() \
168       SET_ATTRIBUTE(N_0, T_0, AN_0) \
169       SET_ATTRIBUTE(N_1, T_1, AN_1) \
170       SET_ATTRIBUTE(N_2, T_2, AN_2) \
171       SET_ATTRIBUTE(N_3, T_3, AN_3) \
172       SET_ATTRIBUTE(N_4, T_4, AN_4) \
173     END_INIT() \
174   public:
175
176 //--------------------------------------------------------------------------------------
177 #define INTERFACE_6(KIND, \
178                     N_0, AN_0, T_0, C_0, \
179                     N_1, AN_1, T_1, C_1, \
180                     N_2, AN_2, T_2, C_2, \
181                     N_3, AN_3, T_3, C_3, \
182                     N_4, AN_4, T_4, C_4, \
183                     N_5, AN_5, T_5, C_5) \
184   public: \
185     INTERFACE_COMMON(KIND) \
186     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
187     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
188     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
189     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
190     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
191     DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
192   protected: \
193     START_INIT() \
194       SET_ATTRIBUTE(N_0, T_0, AN_0) \
195       SET_ATTRIBUTE(N_1, T_1, AN_1) \
196       SET_ATTRIBUTE(N_2, T_2, AN_2) \
197       SET_ATTRIBUTE(N_3, T_3, AN_3) \
198       SET_ATTRIBUTE(N_4, T_4, AN_4) \
199       SET_ATTRIBUTE(N_5, T_5, AN_5) \
200     END_INIT() \
201   public:
202
203 //--------------------------------------------------------------------------------------
204 #define INTERFACE_7(KIND, \
205                     N_0, AN_0, T_0, C_0, \
206                     N_1, AN_1, T_1, C_1, \
207                     N_2, AN_2, T_2, C_2, \
208                     N_3, AN_3, T_3, C_3, \
209                     N_4, AN_4, T_4, C_4, \
210                     N_5, AN_5, T_5, C_5, \
211                     N_6, AN_6, T_6, C_6) \
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   protected: \
222     START_INIT() \
223       SET_ATTRIBUTE(N_0, T_0, AN_0) \
224       SET_ATTRIBUTE(N_1, T_1, AN_1) \
225       SET_ATTRIBUTE(N_2, T_2, AN_2) \
226       SET_ATTRIBUTE(N_3, T_3, AN_3) \
227       SET_ATTRIBUTE(N_4, T_4, AN_4) \
228       SET_ATTRIBUTE(N_5, T_5, AN_5) \
229       SET_ATTRIBUTE(N_6, T_6, AN_6) \
230     END_INIT() \
231   public:
232
233 //--------------------------------------------------------------------------------------
234 #define INTERFACE_8(KIND, \
235                     N_0, AN_0, T_0, C_0, \
236                     N_1, AN_1, T_1, C_1, \
237                     N_2, AN_2, T_2, C_2, \
238                     N_3, AN_3, T_3, C_3, \
239                     N_4, AN_4, T_4, C_4, \
240                     N_5, AN_5, T_5, C_5, \
241                     N_6, AN_6, T_6, C_6, \
242                     N_7, AN_7, T_7, C_7) \
243   public: \
244     INTERFACE_COMMON(KIND) \
245     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
246     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
247     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
248     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
249     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
250     DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
251     DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
252     DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
253   protected: \
254     START_INIT() \
255       SET_ATTRIBUTE(N_0, T_0, AN_0) \
256       SET_ATTRIBUTE(N_1, T_1, AN_1) \
257       SET_ATTRIBUTE(N_2, T_2, AN_2) \
258       SET_ATTRIBUTE(N_3, T_3, AN_3) \
259       SET_ATTRIBUTE(N_4, T_4, AN_4) \
260       SET_ATTRIBUTE(N_5, T_5, AN_5) \
261       SET_ATTRIBUTE(N_6, T_6, AN_6) \
262       SET_ATTRIBUTE(N_7, T_7, AN_7) \
263     END_INIT() \
264   public:
265
266 //--------------------------------------------------------------------------------------
267 #define INTERFACE_9(KIND, \
268                     N_0, AN_0, T_0, C_0, \
269                     N_1, AN_1, T_1, C_1, \
270                     N_2, AN_2, T_2, C_2, \
271                     N_3, AN_3, T_3, C_3, \
272                     N_4, AN_4, T_4, C_4, \
273                     N_5, AN_5, T_5, C_5, \
274                     N_6, AN_6, T_6, C_6, \
275                     N_7, AN_7, T_7, C_7, \
276                     N_8, AN_8, T_8, C_8) \
277   public: \
278     INTERFACE_COMMON(KIND) \
279     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
280     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
281     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
282     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
283     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
284     DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
285     DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
286     DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
287     DEFINE_ATTRIBUTE(N_8, T_8, C_8) \
288   protected: \
289     START_INIT() \
290       SET_ATTRIBUTE(N_0, T_0, AN_0) \
291       SET_ATTRIBUTE(N_1, T_1, AN_1) \
292       SET_ATTRIBUTE(N_2, T_2, AN_2) \
293       SET_ATTRIBUTE(N_3, T_3, AN_3) \
294       SET_ATTRIBUTE(N_4, T_4, AN_4) \
295       SET_ATTRIBUTE(N_5, T_5, AN_5) \
296       SET_ATTRIBUTE(N_6, T_6, AN_6) \
297       SET_ATTRIBUTE(N_7, T_7, AN_7) \
298       SET_ATTRIBUTE(N_8, T_8, AN_8) \
299     END_INIT() \
300   public:
301
302 //--------------------------------------------------------------------------------------
303 #define INTERFACE_10(KIND, \
304                      N_0, AN_0, T_0, C_0, \
305                      N_1, AN_1, T_1, C_1, \
306                      N_2, AN_2, T_2, C_2, \
307                      N_3, AN_3, T_3, C_3, \
308                      N_4, AN_4, T_4, C_4, \
309                      N_5, AN_5, T_5, C_5, \
310                      N_6, AN_6, T_6, C_6, \
311                      N_7, AN_7, T_7, C_7, \
312                      N_8, AN_8, T_8, C_8, \
313                      N_9, AN_9, T_9, C_9) \
314   public: \
315     INTERFACE_COMMON(KIND) \
316     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
317     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
318     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
319     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
320     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
321     DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
322     DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
323     DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
324     DEFINE_ATTRIBUTE(N_8, T_8, C_8) \
325     DEFINE_ATTRIBUTE(N_9, T_9, C_9) \
326   protected: \
327     START_INIT() \
328       SET_ATTRIBUTE(N_0, T_0, AN_0) \
329       SET_ATTRIBUTE(N_1, T_1, AN_1) \
330       SET_ATTRIBUTE(N_2, T_2, AN_2) \
331       SET_ATTRIBUTE(N_3, T_3, AN_3) \
332       SET_ATTRIBUTE(N_4, T_4, AN_4) \
333       SET_ATTRIBUTE(N_5, T_5, AN_5) \
334       SET_ATTRIBUTE(N_6, T_6, AN_6) \
335       SET_ATTRIBUTE(N_7, T_7, AN_7) \
336       SET_ATTRIBUTE(N_8, T_8, AN_8) \
337       SET_ATTRIBUTE(N_9, T_9, AN_9) \
338     END_INIT() \
339   public:
340
341 //--------------------------------------------------------------------------------------
342 #define INTERFACE_11(KIND, \
343                      N_0, AN_0, T_0, C_0, \
344                      N_1, AN_1, T_1, C_1, \
345                      N_2, AN_2, T_2, C_2, \
346                      N_3, AN_3, T_3, C_3, \
347                      N_4, AN_4, T_4, C_4, \
348                      N_5, AN_5, T_5, C_5, \
349                      N_6, AN_6, T_6, C_6, \
350                      N_7, AN_7, T_7, C_7, \
351                      N_8, AN_8, T_8, C_8, \
352                      N_9, AN_9, T_9, C_9, \
353                      N_10, AN_10, T_10, C_10) \
354   public: \
355     INTERFACE_COMMON(KIND) \
356     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
357     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
358     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
359     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
360     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
361     DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
362     DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
363     DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
364     DEFINE_ATTRIBUTE(N_8, T_8, C_8) \
365     DEFINE_ATTRIBUTE(N_9, T_9, C_9) \
366     DEFINE_ATTRIBUTE(N_10, T_10, C_10) \
367   protected: \
368     START_INIT() \
369       SET_ATTRIBUTE(N_0, T_0, AN_0) \
370       SET_ATTRIBUTE(N_1, T_1, AN_1) \
371       SET_ATTRIBUTE(N_2, T_2, AN_2) \
372       SET_ATTRIBUTE(N_3, T_3, AN_3) \
373       SET_ATTRIBUTE(N_4, T_4, AN_4) \
374       SET_ATTRIBUTE(N_5, T_5, AN_5) \
375       SET_ATTRIBUTE(N_6, T_6, AN_6) \
376       SET_ATTRIBUTE(N_7, T_7, AN_7) \
377       SET_ATTRIBUTE(N_8, T_8, AN_8) \
378       SET_ATTRIBUTE(N_9, T_9, AN_9) \
379       SET_ATTRIBUTE(N_10, T_10, AN_10) \
380     END_INIT() \
381   public:
382
383 //--------------------------------------------------------------------------------------
384 #define INTERFACE_12(KIND, \
385                      N_0, AN_0, T_0, C_0, \
386                      N_1, AN_1, T_1, C_1, \
387                      N_2, AN_2, T_2, C_2, \
388                      N_3, AN_3, T_3, C_3, \
389                      N_4, AN_4, T_4, C_4, \
390                      N_5, AN_5, T_5, C_5, \
391                      N_6, AN_6, T_6, C_6, \
392                      N_7, AN_7, T_7, C_7, \
393                      N_8, AN_8, T_8, C_8, \
394                      N_9, AN_9, T_9, C_9, \
395                      N_10, AN_10, T_10, C_10, \
396                      N_11, AN_11, T_11, C_11) \
397   public: \
398     INTERFACE_COMMON(KIND) \
399     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
400     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
401     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
402     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
403     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
404     DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
405     DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
406     DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
407     DEFINE_ATTRIBUTE(N_8, T_8, C_8) \
408     DEFINE_ATTRIBUTE(N_9, T_9, C_9) \
409     DEFINE_ATTRIBUTE(N_10, T_10, C_10) \
410     DEFINE_ATTRIBUTE(N_11, T_11, C_11) \
411   protected: \
412     START_INIT() \
413       SET_ATTRIBUTE(N_0, T_0, AN_0) \
414       SET_ATTRIBUTE(N_1, T_1, AN_1) \
415       SET_ATTRIBUTE(N_2, T_2, AN_2) \
416       SET_ATTRIBUTE(N_3, T_3, AN_3) \
417       SET_ATTRIBUTE(N_4, T_4, AN_4) \
418       SET_ATTRIBUTE(N_5, T_5, AN_5) \
419       SET_ATTRIBUTE(N_6, T_6, AN_6) \
420       SET_ATTRIBUTE(N_7, T_7, AN_7) \
421       SET_ATTRIBUTE(N_8, T_8, AN_8) \
422       SET_ATTRIBUTE(N_9, T_9, AN_9) \
423       SET_ATTRIBUTE(N_10, T_10, AN_10) \
424       SET_ATTRIBUTE(N_11, T_11, AN_11) \
425     END_INIT() \
426   public:
427
428 //--------------------------------------------------------------------------------------
429 #define INTERFACE_14(KIND, \
430                      N_0, AN_0, T_0, C_0, \
431                      N_1, AN_1, T_1, C_1, \
432                      N_2, AN_2, T_2, C_2, \
433                      N_3, AN_3, T_3, C_3, \
434                      N_4, AN_4, T_4, C_4, \
435                      N_5, AN_5, T_5, C_5, \
436                      N_6, AN_6, T_6, C_6, \
437                      N_7, AN_7, T_7, C_7, \
438                      N_8, AN_8, T_8, C_8, \
439                      N_9, AN_9, T_9, C_9, \
440                      N_10, AN_10, T_10, C_10, \
441                      N_11, AN_11, T_11, C_11, \
442                      N_12, AN_12, T_12, C_12, \
443                      N_13, AN_13, T_13, C_13) \
444   public: \
445     INTERFACE_COMMON(KIND) \
446     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
447     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
448     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
449     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
450     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
451     DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
452     DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
453     DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
454     DEFINE_ATTRIBUTE(N_8, T_8, C_8) \
455     DEFINE_ATTRIBUTE(N_9, T_9, C_9) \
456     DEFINE_ATTRIBUTE(N_10, T_10, C_10) \
457     DEFINE_ATTRIBUTE(N_11, T_11, C_11) \
458     DEFINE_ATTRIBUTE(N_12, T_12, C_12) \
459     DEFINE_ATTRIBUTE(N_13, T_13, C_13) \
460   protected: \
461     START_INIT() \
462       SET_ATTRIBUTE(N_0, T_0, AN_0) \
463       SET_ATTRIBUTE(N_1, T_1, AN_1) \
464       SET_ATTRIBUTE(N_2, T_2, AN_2) \
465       SET_ATTRIBUTE(N_3, T_3, AN_3) \
466       SET_ATTRIBUTE(N_4, T_4, AN_4) \
467       SET_ATTRIBUTE(N_5, T_5, AN_5) \
468       SET_ATTRIBUTE(N_6, T_6, AN_6) \
469       SET_ATTRIBUTE(N_7, T_7, AN_7) \
470       SET_ATTRIBUTE(N_8, T_8, AN_8) \
471       SET_ATTRIBUTE(N_9, T_9, AN_9) \
472       SET_ATTRIBUTE(N_10, T_10, AN_10) \
473       SET_ATTRIBUTE(N_11, T_11, AN_11) \
474       SET_ATTRIBUTE(N_12, T_12, AN_12) \
475       SET_ATTRIBUTE(N_13, T_13, AN_13) \
476     END_INIT() \
477   public:
478
479 //--------------------------------------------------------------------------------------
480 #define INTERFACE_20(KIND, \
481                      N_0, AN_0, T_0, C_0, \
482                      N_1, AN_1, T_1, C_1, \
483                      N_2, AN_2, T_2, C_2, \
484                      N_3, AN_3, T_3, C_3, \
485                      N_4, AN_4, T_4, C_4, \
486                      N_5, AN_5, T_5, C_5, \
487                      N_6, AN_6, T_6, C_6, \
488                      N_7, AN_7, T_7, C_7, \
489                      N_8, AN_8, T_8, C_8, \
490                      N_9, AN_9, T_9, C_9, \
491                      N_10, AN_10, T_10, C_10, \
492                      N_11, AN_11, T_11, C_11, \
493                      N_12, AN_12, T_12, C_12, \
494                      N_13, AN_13, T_13, C_13, \
495                      N_14, AN_14, T_14, C_14, \
496                      N_15, AN_15, T_15, C_15, \
497                      N_16, AN_16, T_16, C_16, \
498                      N_17, AN_17, T_17, C_17, \
499                      N_18, AN_18, T_18, C_18, \
500                      N_19, AN_19, T_19, C_19) \
501   public: \
502     INTERFACE_COMMON(KIND) \
503     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
504     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
505     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
506     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
507     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
508     DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
509     DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
510     DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
511     DEFINE_ATTRIBUTE(N_8, T_8, C_8) \
512     DEFINE_ATTRIBUTE(N_9, T_9, C_9) \
513     DEFINE_ATTRIBUTE(N_10, T_10, C_10) \
514     DEFINE_ATTRIBUTE(N_11, T_11, C_11) \
515     DEFINE_ATTRIBUTE(N_12, T_12, C_12) \
516     DEFINE_ATTRIBUTE(N_13, T_13, C_13) \
517     DEFINE_ATTRIBUTE(N_14, T_14, C_14) \
518     DEFINE_ATTRIBUTE(N_15, T_15, C_15) \
519     DEFINE_ATTRIBUTE(N_16, T_16, C_16) \
520     DEFINE_ATTRIBUTE(N_17, T_17, C_17) \
521     DEFINE_ATTRIBUTE(N_18, T_18, C_18) \
522     DEFINE_ATTRIBUTE(N_19, T_19, C_19) \
523   protected: \
524     START_INIT() \
525       SET_ATTRIBUTE(N_0, T_0, AN_0) \
526       SET_ATTRIBUTE(N_1, T_1, AN_1) \
527       SET_ATTRIBUTE(N_2, T_2, AN_2) \
528       SET_ATTRIBUTE(N_3, T_3, AN_3) \
529       SET_ATTRIBUTE(N_4, T_4, AN_4) \
530       SET_ATTRIBUTE(N_5, T_5, AN_5) \
531       SET_ATTRIBUTE(N_6, T_6, AN_6) \
532       SET_ATTRIBUTE(N_7, T_7, AN_7) \
533       SET_ATTRIBUTE(N_8, T_8, AN_8) \
534       SET_ATTRIBUTE(N_9, T_9, AN_9) \
535       SET_ATTRIBUTE(N_10, T_10, AN_10) \
536       SET_ATTRIBUTE(N_11, T_11, AN_11) \
537       SET_ATTRIBUTE(N_12, T_12, AN_12) \
538       SET_ATTRIBUTE(N_13, T_13, AN_13) \
539       SET_ATTRIBUTE(N_14, T_14, AN_14) \
540       SET_ATTRIBUTE(N_15, T_15, AN_15) \
541       SET_ATTRIBUTE(N_16, T_16, AN_16) \
542       SET_ATTRIBUTE(N_17, T_17, AN_17) \
543       SET_ATTRIBUTE(N_18, T_18, AN_18) \
544       SET_ATTRIBUTE(N_19, T_19, AN_19) \
545     END_INIT() \
546   public:
547
548 //--------------------------------------------------------------------------------------
549 #define INTERFACE_21(KIND, \
550                      N_0, AN_0, T_0, C_0, \
551                      N_1, AN_1, T_1, C_1, \
552                      N_2, AN_2, T_2, C_2, \
553                      N_3, AN_3, T_3, C_3, \
554                      N_4, AN_4, T_4, C_4, \
555                      N_5, AN_5, T_5, C_5, \
556                      N_6, AN_6, T_6, C_6, \
557                      N_7, AN_7, T_7, C_7, \
558                      N_8, AN_8, T_8, C_8, \
559                      N_9, AN_9, T_9, C_9, \
560                      N_10, AN_10, T_10, C_10, \
561                      N_11, AN_11, T_11, C_11, \
562                      N_12, AN_12, T_12, C_12, \
563                      N_13, AN_13, T_13, C_13, \
564                      N_14, AN_14, T_14, C_14, \
565                      N_15, AN_15, T_15, C_15, \
566                      N_16, AN_16, T_16, C_16, \
567                      N_17, AN_17, T_17, C_17, \
568                      N_18, AN_18, T_18, C_18, \
569                      N_19, AN_19, T_19, C_19, \
570                      N_20, AN_20, T_20, C_20) \
571   public: \
572     INTERFACE_COMMON(KIND) \
573     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
574     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
575     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
576     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
577     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
578     DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
579     DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
580     DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
581     DEFINE_ATTRIBUTE(N_8, T_8, C_8) \
582     DEFINE_ATTRIBUTE(N_9, T_9, C_9) \
583     DEFINE_ATTRIBUTE(N_10, T_10, C_10) \
584     DEFINE_ATTRIBUTE(N_11, T_11, C_11) \
585     DEFINE_ATTRIBUTE(N_12, T_12, C_12) \
586     DEFINE_ATTRIBUTE(N_13, T_13, C_13) \
587     DEFINE_ATTRIBUTE(N_14, T_14, C_14) \
588     DEFINE_ATTRIBUTE(N_15, T_15, C_15) \
589     DEFINE_ATTRIBUTE(N_16, T_16, C_16) \
590     DEFINE_ATTRIBUTE(N_17, T_17, C_17) \
591     DEFINE_ATTRIBUTE(N_18, T_18, C_18) \
592     DEFINE_ATTRIBUTE(N_19, T_19, C_19) \
593     DEFINE_ATTRIBUTE(N_20, T_20, C_20) \
594   protected: \
595     START_INIT() \
596       SET_ATTRIBUTE(N_0, T_0, AN_0) \
597       SET_ATTRIBUTE(N_1, T_1, AN_1) \
598       SET_ATTRIBUTE(N_2, T_2, AN_2) \
599       SET_ATTRIBUTE(N_3, T_3, AN_3) \
600       SET_ATTRIBUTE(N_4, T_4, AN_4) \
601       SET_ATTRIBUTE(N_5, T_5, AN_5) \
602       SET_ATTRIBUTE(N_6, T_6, AN_6) \
603       SET_ATTRIBUTE(N_7, T_7, AN_7) \
604       SET_ATTRIBUTE(N_8, T_8, AN_8) \
605       SET_ATTRIBUTE(N_9, T_9, AN_9) \
606       SET_ATTRIBUTE(N_10, T_10, AN_10) \
607       SET_ATTRIBUTE(N_11, T_11, AN_11) \
608       SET_ATTRIBUTE(N_12, T_12, AN_12) \
609       SET_ATTRIBUTE(N_13, T_13, AN_13) \
610       SET_ATTRIBUTE(N_14, T_14, AN_14) \
611       SET_ATTRIBUTE(N_15, T_15, AN_15) \
612       SET_ATTRIBUTE(N_16, T_16, AN_16) \
613       SET_ATTRIBUTE(N_17, T_17, AN_17) \
614       SET_ATTRIBUTE(N_18, T_18, AN_18) \
615       SET_ATTRIBUTE(N_19, T_19, AN_19) \
616       SET_ATTRIBUTE(N_20, T_20, AN_20) \
617     END_INIT() \
618   public:
619
620 //--------------------------------------------------------------------------------------
621 #endif /* SRC_MODELHIGHAPI_MODELHIGHAPI_MACRO_H_ */