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