Salome HOME
Issue #1834: Fix length of lines
[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_14(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                      N_12, AN_12, T_12, C_12, \
398                      N_13, AN_13, T_13, C_13) \
399   public: \
400     INTERFACE_COMMON(KIND) \
401     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
402     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
403     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
404     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
405     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
406     DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
407     DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
408     DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
409     DEFINE_ATTRIBUTE(N_8, T_8, C_8) \
410     DEFINE_ATTRIBUTE(N_9, T_9, C_9) \
411     DEFINE_ATTRIBUTE(N_10, T_10, C_10) \
412     DEFINE_ATTRIBUTE(N_11, T_11, C_11) \
413     DEFINE_ATTRIBUTE(N_12, T_12, C_12) \
414     DEFINE_ATTRIBUTE(N_13, T_13, C_13) \
415   protected: \
416     START_INIT() \
417       SET_ATTRIBUTE(N_0, T_0, AN_0) \
418       SET_ATTRIBUTE(N_1, T_1, AN_1) \
419       SET_ATTRIBUTE(N_2, T_2, AN_2) \
420       SET_ATTRIBUTE(N_3, T_3, AN_3) \
421       SET_ATTRIBUTE(N_4, T_4, AN_4) \
422       SET_ATTRIBUTE(N_5, T_5, AN_5) \
423       SET_ATTRIBUTE(N_6, T_6, AN_6) \
424       SET_ATTRIBUTE(N_7, T_7, AN_7) \
425       SET_ATTRIBUTE(N_8, T_8, AN_8) \
426       SET_ATTRIBUTE(N_9, T_9, AN_9) \
427       SET_ATTRIBUTE(N_10, T_10, AN_10) \
428       SET_ATTRIBUTE(N_11, T_11, AN_11) \
429       SET_ATTRIBUTE(N_12, T_12, AN_12) \
430       SET_ATTRIBUTE(N_13, T_13, AN_13) \
431     END_INIT() \
432   public:
433
434 //--------------------------------------------------------------------------------------
435 #define INTERFACE_20(KIND, \
436                      N_0, AN_0, T_0, C_0, \
437                      N_1, AN_1, T_1, C_1, \
438                      N_2, AN_2, T_2, C_2, \
439                      N_3, AN_3, T_3, C_3, \
440                      N_4, AN_4, T_4, C_4, \
441                      N_5, AN_5, T_5, C_5, \
442                      N_6, AN_6, T_6, C_6, \
443                      N_7, AN_7, T_7, C_7, \
444                      N_8, AN_8, T_8, C_8, \
445                      N_9, AN_9, T_9, C_9, \
446                      N_10, AN_10, T_10, C_10, \
447                      N_11, AN_11, T_11, C_11, \
448                      N_12, AN_12, T_12, C_12, \
449                      N_13, AN_13, T_13, C_13, \
450                      N_14, AN_14, T_14, C_14, \
451                      N_15, AN_15, T_15, C_15, \
452                      N_16, AN_16, T_16, C_16, \
453                      N_17, AN_17, T_17, C_17, \
454                      N_18, AN_18, T_18, C_18, \
455                      N_19, AN_19, T_19, C_19) \
456   public: \
457     INTERFACE_COMMON(KIND) \
458     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
459     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
460     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
461     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
462     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
463     DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
464     DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
465     DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
466     DEFINE_ATTRIBUTE(N_8, T_8, C_8) \
467     DEFINE_ATTRIBUTE(N_9, T_9, C_9) \
468     DEFINE_ATTRIBUTE(N_10, T_10, C_10) \
469     DEFINE_ATTRIBUTE(N_11, T_11, C_11) \
470     DEFINE_ATTRIBUTE(N_12, T_12, C_12) \
471     DEFINE_ATTRIBUTE(N_13, T_13, C_13) \
472     DEFINE_ATTRIBUTE(N_14, T_14, C_14) \
473     DEFINE_ATTRIBUTE(N_15, T_15, C_15) \
474     DEFINE_ATTRIBUTE(N_16, T_16, C_16) \
475     DEFINE_ATTRIBUTE(N_17, T_17, C_17) \
476     DEFINE_ATTRIBUTE(N_18, T_18, C_18) \
477     DEFINE_ATTRIBUTE(N_19, T_19, C_19) \
478   protected: \
479     START_INIT() \
480       SET_ATTRIBUTE(N_0, T_0, AN_0) \
481       SET_ATTRIBUTE(N_1, T_1, AN_1) \
482       SET_ATTRIBUTE(N_2, T_2, AN_2) \
483       SET_ATTRIBUTE(N_3, T_3, AN_3) \
484       SET_ATTRIBUTE(N_4, T_4, AN_4) \
485       SET_ATTRIBUTE(N_5, T_5, AN_5) \
486       SET_ATTRIBUTE(N_6, T_6, AN_6) \
487       SET_ATTRIBUTE(N_7, T_7, AN_7) \
488       SET_ATTRIBUTE(N_8, T_8, AN_8) \
489       SET_ATTRIBUTE(N_9, T_9, AN_9) \
490       SET_ATTRIBUTE(N_10, T_10, AN_10) \
491       SET_ATTRIBUTE(N_11, T_11, AN_11) \
492       SET_ATTRIBUTE(N_12, T_12, AN_12) \
493       SET_ATTRIBUTE(N_13, T_13, AN_13) \
494       SET_ATTRIBUTE(N_14, T_14, AN_14) \
495       SET_ATTRIBUTE(N_15, T_15, AN_15) \
496       SET_ATTRIBUTE(N_16, T_16, AN_16) \
497       SET_ATTRIBUTE(N_17, T_17, AN_17) \
498       SET_ATTRIBUTE(N_18, T_18, AN_18) \
499       SET_ATTRIBUTE(N_19, T_19, AN_19) \
500     END_INIT() \
501   public:
502
503 //--------------------------------------------------------------------------------------
504 #define INTERFACE_21(KIND, \
505                      N_0, AN_0, T_0, C_0, \
506                      N_1, AN_1, T_1, C_1, \
507                      N_2, AN_2, T_2, C_2, \
508                      N_3, AN_3, T_3, C_3, \
509                      N_4, AN_4, T_4, C_4, \
510                      N_5, AN_5, T_5, C_5, \
511                      N_6, AN_6, T_6, C_6, \
512                      N_7, AN_7, T_7, C_7, \
513                      N_8, AN_8, T_8, C_8, \
514                      N_9, AN_9, T_9, C_9, \
515                      N_10, AN_10, T_10, C_10, \
516                      N_11, AN_11, T_11, C_11, \
517                      N_12, AN_12, T_12, C_12, \
518                      N_13, AN_13, T_13, C_13, \
519                      N_14, AN_14, T_14, C_14, \
520                      N_15, AN_15, T_15, C_15, \
521                      N_16, AN_16, T_16, C_16, \
522                      N_17, AN_17, T_17, C_17, \
523                      N_18, AN_18, T_18, C_18, \
524                      N_19, AN_19, T_19, C_19, \
525                      N_20, AN_20, T_20, C_20) \
526   public: \
527     INTERFACE_COMMON(KIND) \
528     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
529     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
530     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
531     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
532     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
533     DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
534     DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
535     DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
536     DEFINE_ATTRIBUTE(N_8, T_8, C_8) \
537     DEFINE_ATTRIBUTE(N_9, T_9, C_9) \
538     DEFINE_ATTRIBUTE(N_10, T_10, C_10) \
539     DEFINE_ATTRIBUTE(N_11, T_11, C_11) \
540     DEFINE_ATTRIBUTE(N_12, T_12, C_12) \
541     DEFINE_ATTRIBUTE(N_13, T_13, C_13) \
542     DEFINE_ATTRIBUTE(N_14, T_14, C_14) \
543     DEFINE_ATTRIBUTE(N_15, T_15, C_15) \
544     DEFINE_ATTRIBUTE(N_16, T_16, C_16) \
545     DEFINE_ATTRIBUTE(N_17, T_17, C_17) \
546     DEFINE_ATTRIBUTE(N_18, T_18, C_18) \
547     DEFINE_ATTRIBUTE(N_19, T_19, C_19) \
548     DEFINE_ATTRIBUTE(N_20, T_20, C_20) \
549   protected: \
550     START_INIT() \
551       SET_ATTRIBUTE(N_0, T_0, AN_0) \
552       SET_ATTRIBUTE(N_1, T_1, AN_1) \
553       SET_ATTRIBUTE(N_2, T_2, AN_2) \
554       SET_ATTRIBUTE(N_3, T_3, AN_3) \
555       SET_ATTRIBUTE(N_4, T_4, AN_4) \
556       SET_ATTRIBUTE(N_5, T_5, AN_5) \
557       SET_ATTRIBUTE(N_6, T_6, AN_6) \
558       SET_ATTRIBUTE(N_7, T_7, AN_7) \
559       SET_ATTRIBUTE(N_8, T_8, AN_8) \
560       SET_ATTRIBUTE(N_9, T_9, AN_9) \
561       SET_ATTRIBUTE(N_10, T_10, AN_10) \
562       SET_ATTRIBUTE(N_11, T_11, AN_11) \
563       SET_ATTRIBUTE(N_12, T_12, AN_12) \
564       SET_ATTRIBUTE(N_13, T_13, AN_13) \
565       SET_ATTRIBUTE(N_14, T_14, AN_14) \
566       SET_ATTRIBUTE(N_15, T_15, AN_15) \
567       SET_ATTRIBUTE(N_16, T_16, AN_16) \
568       SET_ATTRIBUTE(N_17, T_17, AN_17) \
569       SET_ATTRIBUTE(N_18, T_18, AN_18) \
570       SET_ATTRIBUTE(N_19, T_19, AN_19) \
571       SET_ATTRIBUTE(N_20, T_20, AN_20) \
572     END_INIT() \
573   public:
574
575 //--------------------------------------------------------------------------------------
576 #endif /* SRC_MODELHIGHAPI_MODELHIGHAPI_MACRO_H_ */