Salome HOME
Merging of points interface
[modules/shaper.git] / src / ModelHighAPI / ModelHighAPI_Macro.h
1 // Copyright (C) 2014-2017  CEA/DEN, EDF R&D
2 //
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
7 //
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 // Lesser General Public License for more details.
12 //
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16 //
17 // See http://www.salome-platform.org/ or
18 // email : webmaster.salome@opencascade.com<mailto:webmaster.salome@opencascade.com>
19 //
20
21 #ifndef SRC_MODELHIGHAPI_MODELHIGHAPI_MACRO_H_
22 #define SRC_MODELHIGHAPI_MODELHIGHAPI_MACRO_H_
23
24 //--------------------------------------------------------------------------------------
25 #include <GeomDataAPI_Dir.h>
26 #include <GeomDataAPI_Point.h>
27 #include <GeomDataAPI_Point2D.h>
28 //--------------------------------------------------------------------------------------
29 #include <ModelAPI_AttributeBoolean.h>
30 #include <ModelAPI_AttributeDocRef.h>
31 #include <ModelAPI_AttributeDouble.h>
32 #include <ModelAPI_AttributeIntArray.h>
33 #include <ModelAPI_AttributeInteger.h>
34 #include <ModelAPI_AttributeRefAttr.h>
35 #include <ModelAPI_AttributeRefAttrList.h>
36 #include <ModelAPI_AttributeReference.h>
37 #include <ModelAPI_AttributeRefList.h>
38 #include <ModelAPI_AttributeSelection.h>
39 #include <ModelAPI_AttributeSelectionList.h>
40 #include <ModelAPI_AttributeString.h>
41 #include <ModelAPI_Feature.h>
42
43 //--------------------------------------------------------------------------------------
44 #define VAR_NAME(NAME) my##NAME
45
46 //--------------------------------------------------------------------------------------
47 #define TO_STRING_(NAME) #NAME
48 #define TO_STRING(NAME) TO_STRING_(NAME)
49
50 //--------------------------------------------------------------------------------------
51 // Used in INTERFACE_N for create variable and getter
52 #define DEFINE_ATTRIBUTE(NAME, TYPE, COMMENT) \
53     COMMENT \
54     std::shared_ptr<TYPE> NAME() const { return VAR_NAME(NAME); } \
55   protected: \
56     std::shared_ptr<TYPE> VAR_NAME(NAME); \
57   public:
58
59 //--------------------------------------------------------------------------------------
60 // Used in INTERFACE_N inside START_INIT/END_INIT for
61 // set variable with attribute received from feature
62 #define SET_ATTRIBUTE(NAME, TYPE, ATT_NAME) \
63   VAR_NAME(NAME) = std::dynamic_pointer_cast<TYPE>(feature()->attribute(ATT_NAME)); \
64   if (!VAR_NAME(NAME)) \
65     return false; \
66   myAttrGetter[ATT_NAME] = TO_STRING(NAME);
67
68 //--------------------------------------------------------------------------------------
69 #define INTERFACE_COMMON(KIND) \
70   static std::string ID() { return KIND; }\
71   virtual std::string getID() { return ID(); }
72
73 //--------------------------------------------------------------------------------------
74 #define START_INIT() \
75   bool initialize() { \
76     if (!feature()) { \
77       throwException(ID() + " exception: The feature is NULL."); \
78       return false; \
79     } \
80     if (getKind() != getID()) { \
81       throwException(ID() + " exception: Wrong feature kind."); \
82       return false; \
83     }
84
85 //--------------------------------------------------------------------------------------
86 #define END_INIT() \
87     return true; \
88   }
89
90 //--------------------------------------------------------------------------------------
91 #define INTERFACE_0(KIND) \
92   public: \
93     INTERFACE_COMMON(KIND) \
94   protected: \
95     START_INIT() \
96     END_INIT() \
97   public:
98
99 //--------------------------------------------------------------------------------------
100 #define INTERFACE_1(KIND, \
101                     N_0, AN_0, T_0, C_0) \
102   public: \
103     INTERFACE_COMMON(KIND) \
104     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
105   protected: \
106     START_INIT() \
107       SET_ATTRIBUTE(N_0, T_0, AN_0) \
108     END_INIT() \
109   public:
110
111 //--------------------------------------------------------------------------------------
112 #define INTERFACE_2(KIND, \
113                     N_0, AN_0, T_0, C_0, \
114                     N_1, AN_1, T_1, C_1) \
115   public: \
116     INTERFACE_COMMON(KIND) \
117     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
118     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
119   protected: \
120     START_INIT() \
121       SET_ATTRIBUTE(N_0, T_0, AN_0) \
122       SET_ATTRIBUTE(N_1, T_1, AN_1) \
123     END_INIT() \
124   public:
125
126 //--------------------------------------------------------------------------------------
127 #define INTERFACE_3(KIND, \
128                     N_0, AN_0, T_0, C_0, \
129                     N_1, AN_1, T_1, C_1, \
130                     N_2, AN_2, T_2, C_2) \
131   public: \
132     INTERFACE_COMMON(KIND) \
133     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
134     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
135     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
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     END_INIT() \
142   public:
143
144 //--------------------------------------------------------------------------------------
145 #define INTERFACE_4(KIND, \
146                     N_0, AN_0, T_0, C_0, \
147                     N_1, AN_1, T_1, C_1, \
148                     N_2, AN_2, T_2, C_2, \
149                     N_3, AN_3, T_3, C_3) \
150   public: \
151     INTERFACE_COMMON(KIND) \
152     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
153     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
154     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
155     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
156   protected: \
157     START_INIT() \
158       SET_ATTRIBUTE(N_0, T_0, AN_0) \
159       SET_ATTRIBUTE(N_1, T_1, AN_1) \
160       SET_ATTRIBUTE(N_2, T_2, AN_2) \
161       SET_ATTRIBUTE(N_3, T_3, AN_3) \
162     END_INIT() \
163   public:
164
165 //--------------------------------------------------------------------------------------
166 #define INTERFACE_5(KIND, \
167                     N_0, AN_0, T_0, C_0, \
168                     N_1, AN_1, T_1, C_1, \
169                     N_2, AN_2, T_2, C_2, \
170                     N_3, AN_3, T_3, C_3, \
171                     N_4, AN_4, T_4, C_4) \
172   public: \
173     INTERFACE_COMMON(KIND) \
174     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
175     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
176     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
177     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
178     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
179   protected: \
180     START_INIT() \
181       SET_ATTRIBUTE(N_0, T_0, AN_0) \
182       SET_ATTRIBUTE(N_1, T_1, AN_1) \
183       SET_ATTRIBUTE(N_2, T_2, AN_2) \
184       SET_ATTRIBUTE(N_3, T_3, AN_3) \
185       SET_ATTRIBUTE(N_4, T_4, AN_4) \
186     END_INIT() \
187   public:
188
189 //--------------------------------------------------------------------------------------
190 #define INTERFACE_6(KIND, \
191                     N_0, AN_0, T_0, C_0, \
192                     N_1, AN_1, T_1, C_1, \
193                     N_2, AN_2, T_2, C_2, \
194                     N_3, AN_3, T_3, C_3, \
195                     N_4, AN_4, T_4, C_4, \
196                     N_5, AN_5, T_5, C_5) \
197   public: \
198     INTERFACE_COMMON(KIND) \
199     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
200     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
201     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
202     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
203     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
204     DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
205   protected: \
206     START_INIT() \
207       SET_ATTRIBUTE(N_0, T_0, AN_0) \
208       SET_ATTRIBUTE(N_1, T_1, AN_1) \
209       SET_ATTRIBUTE(N_2, T_2, AN_2) \
210       SET_ATTRIBUTE(N_3, T_3, AN_3) \
211       SET_ATTRIBUTE(N_4, T_4, AN_4) \
212       SET_ATTRIBUTE(N_5, T_5, AN_5) \
213     END_INIT() \
214   public:
215
216 //--------------------------------------------------------------------------------------
217 #define INTERFACE_7(KIND, \
218                     N_0, AN_0, T_0, C_0, \
219                     N_1, AN_1, T_1, C_1, \
220                     N_2, AN_2, T_2, C_2, \
221                     N_3, AN_3, T_3, C_3, \
222                     N_4, AN_4, T_4, C_4, \
223                     N_5, AN_5, T_5, C_5, \
224                     N_6, AN_6, T_6, C_6) \
225   public: \
226     INTERFACE_COMMON(KIND) \
227     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
228     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
229     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
230     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
231     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
232     DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
233     DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
234   protected: \
235     START_INIT() \
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     END_INIT() \
244   public:
245
246 //--------------------------------------------------------------------------------------
247 #define INTERFACE_8(KIND, \
248                     N_0, AN_0, T_0, C_0, \
249                     N_1, AN_1, T_1, C_1, \
250                     N_2, AN_2, T_2, C_2, \
251                     N_3, AN_3, T_3, C_3, \
252                     N_4, AN_4, T_4, C_4, \
253                     N_5, AN_5, T_5, C_5, \
254                     N_6, AN_6, T_6, C_6, \
255                     N_7, AN_7, T_7, C_7) \
256   public: \
257     INTERFACE_COMMON(KIND) \
258     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
259     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
260     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
261     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
262     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
263     DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
264     DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
265     DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
266   protected: \
267     START_INIT() \
268       SET_ATTRIBUTE(N_0, T_0, AN_0) \
269       SET_ATTRIBUTE(N_1, T_1, AN_1) \
270       SET_ATTRIBUTE(N_2, T_2, AN_2) \
271       SET_ATTRIBUTE(N_3, T_3, AN_3) \
272       SET_ATTRIBUTE(N_4, T_4, AN_4) \
273       SET_ATTRIBUTE(N_5, T_5, AN_5) \
274       SET_ATTRIBUTE(N_6, T_6, AN_6) \
275       SET_ATTRIBUTE(N_7, T_7, AN_7) \
276     END_INIT() \
277   public:
278
279 //--------------------------------------------------------------------------------------
280 #define INTERFACE_9(KIND, \
281                     N_0, AN_0, T_0, C_0, \
282                     N_1, AN_1, T_1, C_1, \
283                     N_2, AN_2, T_2, C_2, \
284                     N_3, AN_3, T_3, C_3, \
285                     N_4, AN_4, T_4, C_4, \
286                     N_5, AN_5, T_5, C_5, \
287                     N_6, AN_6, T_6, C_6, \
288                     N_7, AN_7, T_7, C_7, \
289                     N_8, AN_8, T_8, C_8) \
290   public: \
291     INTERFACE_COMMON(KIND) \
292     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
293     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
294     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
295     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
296     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
297     DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
298     DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
299     DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
300     DEFINE_ATTRIBUTE(N_8, T_8, C_8) \
301   protected: \
302     START_INIT() \
303       SET_ATTRIBUTE(N_0, T_0, AN_0) \
304       SET_ATTRIBUTE(N_1, T_1, AN_1) \
305       SET_ATTRIBUTE(N_2, T_2, AN_2) \
306       SET_ATTRIBUTE(N_3, T_3, AN_3) \
307       SET_ATTRIBUTE(N_4, T_4, AN_4) \
308       SET_ATTRIBUTE(N_5, T_5, AN_5) \
309       SET_ATTRIBUTE(N_6, T_6, AN_6) \
310       SET_ATTRIBUTE(N_7, T_7, AN_7) \
311       SET_ATTRIBUTE(N_8, T_8, AN_8) \
312     END_INIT() \
313   public:
314
315 //--------------------------------------------------------------------------------------
316 #define INTERFACE_10(KIND, \
317                      N_0, AN_0, T_0, C_0, \
318                      N_1, AN_1, T_1, C_1, \
319                      N_2, AN_2, T_2, C_2, \
320                      N_3, AN_3, T_3, C_3, \
321                      N_4, AN_4, T_4, C_4, \
322                      N_5, AN_5, T_5, C_5, \
323                      N_6, AN_6, T_6, C_6, \
324                      N_7, AN_7, T_7, C_7, \
325                      N_8, AN_8, T_8, C_8, \
326                      N_9, AN_9, T_9, C_9) \
327   public: \
328     INTERFACE_COMMON(KIND) \
329     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
330     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
331     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
332     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
333     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
334     DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
335     DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
336     DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
337     DEFINE_ATTRIBUTE(N_8, T_8, C_8) \
338     DEFINE_ATTRIBUTE(N_9, T_9, C_9) \
339   protected: \
340     START_INIT() \
341       SET_ATTRIBUTE(N_0, T_0, AN_0) \
342       SET_ATTRIBUTE(N_1, T_1, AN_1) \
343       SET_ATTRIBUTE(N_2, T_2, AN_2) \
344       SET_ATTRIBUTE(N_3, T_3, AN_3) \
345       SET_ATTRIBUTE(N_4, T_4, AN_4) \
346       SET_ATTRIBUTE(N_5, T_5, AN_5) \
347       SET_ATTRIBUTE(N_6, T_6, AN_6) \
348       SET_ATTRIBUTE(N_7, T_7, AN_7) \
349       SET_ATTRIBUTE(N_8, T_8, AN_8) \
350       SET_ATTRIBUTE(N_9, T_9, AN_9) \
351     END_INIT() \
352   public:
353
354 //--------------------------------------------------------------------------------------
355 #define INTERFACE_11(KIND, \
356                      N_0, AN_0, T_0, C_0, \
357                      N_1, AN_1, T_1, C_1, \
358                      N_2, AN_2, T_2, C_2, \
359                      N_3, AN_3, T_3, C_3, \
360                      N_4, AN_4, T_4, C_4, \
361                      N_5, AN_5, T_5, C_5, \
362                      N_6, AN_6, T_6, C_6, \
363                      N_7, AN_7, T_7, C_7, \
364                      N_8, AN_8, T_8, C_8, \
365                      N_9, AN_9, T_9, C_9, \
366                      N_10, AN_10, T_10, C_10) \
367   public: \
368     INTERFACE_COMMON(KIND) \
369     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
370     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
371     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
372     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
373     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
374     DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
375     DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
376     DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
377     DEFINE_ATTRIBUTE(N_8, T_8, C_8) \
378     DEFINE_ATTRIBUTE(N_9, T_9, C_9) \
379     DEFINE_ATTRIBUTE(N_10, T_10, C_10) \
380   protected: \
381     START_INIT() \
382       SET_ATTRIBUTE(N_0, T_0, AN_0) \
383       SET_ATTRIBUTE(N_1, T_1, AN_1) \
384       SET_ATTRIBUTE(N_2, T_2, AN_2) \
385       SET_ATTRIBUTE(N_3, T_3, AN_3) \
386       SET_ATTRIBUTE(N_4, T_4, AN_4) \
387       SET_ATTRIBUTE(N_5, T_5, AN_5) \
388       SET_ATTRIBUTE(N_6, T_6, AN_6) \
389       SET_ATTRIBUTE(N_7, T_7, AN_7) \
390       SET_ATTRIBUTE(N_8, T_8, AN_8) \
391       SET_ATTRIBUTE(N_9, T_9, AN_9) \
392       SET_ATTRIBUTE(N_10, T_10, AN_10) \
393     END_INIT() \
394   public:
395
396 //--------------------------------------------------------------------------------------
397 #define INTERFACE_12(KIND, \
398                      N_0, AN_0, T_0, C_0, \
399                      N_1, AN_1, T_1, C_1, \
400                      N_2, AN_2, T_2, C_2, \
401                      N_3, AN_3, T_3, C_3, \
402                      N_4, AN_4, T_4, C_4, \
403                      N_5, AN_5, T_5, C_5, \
404                      N_6, AN_6, T_6, C_6, \
405                      N_7, AN_7, T_7, C_7, \
406                      N_8, AN_8, T_8, C_8, \
407                      N_9, AN_9, T_9, C_9, \
408                      N_10, AN_10, T_10, C_10, \
409                      N_11, AN_11, T_11, C_11) \
410   public: \
411     INTERFACE_COMMON(KIND) \
412     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
413     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
414     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
415     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
416     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
417     DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
418     DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
419     DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
420     DEFINE_ATTRIBUTE(N_8, T_8, C_8) \
421     DEFINE_ATTRIBUTE(N_9, T_9, C_9) \
422     DEFINE_ATTRIBUTE(N_10, T_10, C_10) \
423     DEFINE_ATTRIBUTE(N_11, T_11, C_11) \
424   protected: \
425     START_INIT() \
426       SET_ATTRIBUTE(N_0, T_0, AN_0) \
427       SET_ATTRIBUTE(N_1, T_1, AN_1) \
428       SET_ATTRIBUTE(N_2, T_2, AN_2) \
429       SET_ATTRIBUTE(N_3, T_3, AN_3) \
430       SET_ATTRIBUTE(N_4, T_4, AN_4) \
431       SET_ATTRIBUTE(N_5, T_5, AN_5) \
432       SET_ATTRIBUTE(N_6, T_6, AN_6) \
433       SET_ATTRIBUTE(N_7, T_7, AN_7) \
434       SET_ATTRIBUTE(N_8, T_8, AN_8) \
435       SET_ATTRIBUTE(N_9, T_9, AN_9) \
436       SET_ATTRIBUTE(N_10, T_10, AN_10) \
437       SET_ATTRIBUTE(N_11, T_11, AN_11) \
438     END_INIT() \
439   public:
440
441 //--------------------------------------------------------------------------------------
442 #define INTERFACE_14(KIND, \
443                      N_0, AN_0, T_0, C_0, \
444                      N_1, AN_1, T_1, C_1, \
445                      N_2, AN_2, T_2, C_2, \
446                      N_3, AN_3, T_3, C_3, \
447                      N_4, AN_4, T_4, C_4, \
448                      N_5, AN_5, T_5, C_5, \
449                      N_6, AN_6, T_6, C_6, \
450                      N_7, AN_7, T_7, C_7, \
451                      N_8, AN_8, T_8, C_8, \
452                      N_9, AN_9, T_9, C_9, \
453                      N_10, AN_10, T_10, C_10, \
454                      N_11, AN_11, T_11, C_11, \
455                      N_12, AN_12, T_12, C_12, \
456                      N_13, AN_13, T_13, C_13) \
457   public: \
458     INTERFACE_COMMON(KIND) \
459     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
460     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
461     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
462     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
463     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
464     DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
465     DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
466     DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
467     DEFINE_ATTRIBUTE(N_8, T_8, C_8) \
468     DEFINE_ATTRIBUTE(N_9, T_9, C_9) \
469     DEFINE_ATTRIBUTE(N_10, T_10, C_10) \
470     DEFINE_ATTRIBUTE(N_11, T_11, C_11) \
471     DEFINE_ATTRIBUTE(N_12, T_12, C_12) \
472     DEFINE_ATTRIBUTE(N_13, T_13, C_13) \
473   protected: \
474     START_INIT() \
475       SET_ATTRIBUTE(N_0, T_0, AN_0) \
476       SET_ATTRIBUTE(N_1, T_1, AN_1) \
477       SET_ATTRIBUTE(N_2, T_2, AN_2) \
478       SET_ATTRIBUTE(N_3, T_3, AN_3) \
479       SET_ATTRIBUTE(N_4, T_4, AN_4) \
480       SET_ATTRIBUTE(N_5, T_5, AN_5) \
481       SET_ATTRIBUTE(N_6, T_6, AN_6) \
482       SET_ATTRIBUTE(N_7, T_7, AN_7) \
483       SET_ATTRIBUTE(N_8, T_8, AN_8) \
484       SET_ATTRIBUTE(N_9, T_9, AN_9) \
485       SET_ATTRIBUTE(N_10, T_10, AN_10) \
486       SET_ATTRIBUTE(N_11, T_11, AN_11) \
487       SET_ATTRIBUTE(N_12, T_12, AN_12) \
488       SET_ATTRIBUTE(N_13, T_13, AN_13) \
489     END_INIT() \
490   public:
491
492 //--------------------------------------------------------------------------------------
493 #define INTERFACE_16(KIND, \
494                      N_0, AN_0, T_0, C_0, \
495                      N_1, AN_1, T_1, C_1, \
496                      N_2, AN_2, T_2, C_2, \
497                      N_3, AN_3, T_3, C_3, \
498                      N_4, AN_4, T_4, C_4, \
499                      N_5, AN_5, T_5, C_5, \
500                      N_6, AN_6, T_6, C_6, \
501                      N_7, AN_7, T_7, C_7, \
502                      N_8, AN_8, T_8, C_8, \
503                      N_9, AN_9, T_9, C_9, \
504                      N_10, AN_10, T_10, C_10, \
505                      N_11, AN_11, T_11, C_11, \
506                      N_12, AN_12, T_12, C_12, \
507                      N_13, AN_13, T_13, C_13, \
508                      N_14, AN_14, T_14, C_14, \
509                      N_15, AN_15, T_15, C_15) \
510   public: \
511     INTERFACE_COMMON(KIND) \
512     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
513     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
514     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
515     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
516     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
517     DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
518     DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
519     DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
520     DEFINE_ATTRIBUTE(N_8, T_8, C_8) \
521     DEFINE_ATTRIBUTE(N_9, T_9, C_9) \
522     DEFINE_ATTRIBUTE(N_10, T_10, C_10) \
523     DEFINE_ATTRIBUTE(N_11, T_11, C_11) \
524     DEFINE_ATTRIBUTE(N_12, T_12, C_12) \
525     DEFINE_ATTRIBUTE(N_13, T_13, C_13) \
526     DEFINE_ATTRIBUTE(N_14, T_14, C_14) \
527     DEFINE_ATTRIBUTE(N_15, T_15, C_15) \
528   protected: \
529     START_INIT() \
530       SET_ATTRIBUTE(N_0, T_0, AN_0) \
531       SET_ATTRIBUTE(N_1, T_1, AN_1) \
532       SET_ATTRIBUTE(N_2, T_2, AN_2) \
533       SET_ATTRIBUTE(N_3, T_3, AN_3) \
534       SET_ATTRIBUTE(N_4, T_4, AN_4) \
535       SET_ATTRIBUTE(N_5, T_5, AN_5) \
536       SET_ATTRIBUTE(N_6, T_6, AN_6) \
537       SET_ATTRIBUTE(N_7, T_7, AN_7) \
538       SET_ATTRIBUTE(N_8, T_8, AN_8) \
539       SET_ATTRIBUTE(N_9, T_9, AN_9) \
540       SET_ATTRIBUTE(N_10, T_10, AN_10) \
541       SET_ATTRIBUTE(N_11, T_11, AN_11) \
542       SET_ATTRIBUTE(N_12, T_12, AN_12) \
543       SET_ATTRIBUTE(N_13, T_13, AN_13) \
544       SET_ATTRIBUTE(N_14, T_14, AN_14) \
545       SET_ATTRIBUTE(N_15, T_15, AN_15) \
546     END_INIT() \
547   public:
548
549 //--------------------------------------------------------------------------------------
550 #define INTERFACE_18(KIND, \
551                      N_0, AN_0, T_0, C_0, \
552                      N_1, AN_1, T_1, C_1, \
553                      N_2, AN_2, T_2, C_2, \
554                      N_3, AN_3, T_3, C_3, \
555                      N_4, AN_4, T_4, C_4, \
556                      N_5, AN_5, T_5, C_5, \
557                      N_6, AN_6, T_6, C_6, \
558                      N_7, AN_7, T_7, C_7, \
559                      N_8, AN_8, T_8, C_8, \
560                      N_9, AN_9, T_9, C_9, \
561                      N_10, AN_10, T_10, C_10, \
562                      N_11, AN_11, T_11, C_11, \
563                      N_12, AN_12, T_12, C_12, \
564                      N_13, AN_13, T_13, C_13, \
565                      N_14, AN_14, T_14, C_14, \
566                      N_15, AN_15, T_15, C_15, \
567                      N_16, AN_16, T_16, C_16, \
568                      N_17, AN_17, T_17, C_17) \
569   public: \
570     INTERFACE_COMMON(KIND) \
571     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
572     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
573     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
574     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
575     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
576     DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
577     DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
578     DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
579     DEFINE_ATTRIBUTE(N_8, T_8, C_8) \
580     DEFINE_ATTRIBUTE(N_9, T_9, C_9) \
581     DEFINE_ATTRIBUTE(N_10, T_10, C_10) \
582     DEFINE_ATTRIBUTE(N_11, T_11, C_11) \
583     DEFINE_ATTRIBUTE(N_12, T_12, C_12) \
584     DEFINE_ATTRIBUTE(N_13, T_13, C_13) \
585     DEFINE_ATTRIBUTE(N_14, T_14, C_14) \
586     DEFINE_ATTRIBUTE(N_15, T_15, C_15) \
587     DEFINE_ATTRIBUTE(N_16, T_16, C_16) \
588     DEFINE_ATTRIBUTE(N_17, T_17, C_17) \
589   protected: \
590     START_INIT() \
591       SET_ATTRIBUTE(N_0, T_0, AN_0) \
592       SET_ATTRIBUTE(N_1, T_1, AN_1) \
593       SET_ATTRIBUTE(N_2, T_2, AN_2) \
594       SET_ATTRIBUTE(N_3, T_3, AN_3) \
595       SET_ATTRIBUTE(N_4, T_4, AN_4) \
596       SET_ATTRIBUTE(N_5, T_5, AN_5) \
597       SET_ATTRIBUTE(N_6, T_6, AN_6) \
598       SET_ATTRIBUTE(N_7, T_7, AN_7) \
599       SET_ATTRIBUTE(N_8, T_8, AN_8) \
600       SET_ATTRIBUTE(N_9, T_9, AN_9) \
601       SET_ATTRIBUTE(N_10, T_10, AN_10) \
602       SET_ATTRIBUTE(N_11, T_11, AN_11) \
603       SET_ATTRIBUTE(N_12, T_12, AN_12) \
604       SET_ATTRIBUTE(N_13, T_13, AN_13) \
605       SET_ATTRIBUTE(N_14, T_14, AN_14) \
606       SET_ATTRIBUTE(N_15, T_15, AN_15) \
607       SET_ATTRIBUTE(N_16, T_16, AN_16) \
608       SET_ATTRIBUTE(N_17, T_17, AN_17) \
609     END_INIT() \
610   public:
611
612 //--------------------------------------------------------------------------------------
613 #define INTERFACE_20(KIND, \
614                      N_0, AN_0, T_0, C_0, \
615                      N_1, AN_1, T_1, C_1, \
616                      N_2, AN_2, T_2, C_2, \
617                      N_3, AN_3, T_3, C_3, \
618                      N_4, AN_4, T_4, C_4, \
619                      N_5, AN_5, T_5, C_5, \
620                      N_6, AN_6, T_6, C_6, \
621                      N_7, AN_7, T_7, C_7, \
622                      N_8, AN_8, T_8, C_8, \
623                      N_9, AN_9, T_9, C_9, \
624                      N_10, AN_10, T_10, C_10, \
625                      N_11, AN_11, T_11, C_11, \
626                      N_12, AN_12, T_12, C_12, \
627                      N_13, AN_13, T_13, C_13, \
628                      N_14, AN_14, T_14, C_14, \
629                      N_15, AN_15, T_15, C_15, \
630                      N_16, AN_16, T_16, C_16, \
631                      N_17, AN_17, T_17, C_17, \
632                      N_18, AN_18, T_18, C_18, \
633                      N_19, AN_19, T_19, C_19) \
634   public: \
635     INTERFACE_COMMON(KIND) \
636     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
637     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
638     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
639     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
640     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
641     DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
642     DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
643     DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
644     DEFINE_ATTRIBUTE(N_8, T_8, C_8) \
645     DEFINE_ATTRIBUTE(N_9, T_9, C_9) \
646     DEFINE_ATTRIBUTE(N_10, T_10, C_10) \
647     DEFINE_ATTRIBUTE(N_11, T_11, C_11) \
648     DEFINE_ATTRIBUTE(N_12, T_12, C_12) \
649     DEFINE_ATTRIBUTE(N_13, T_13, C_13) \
650     DEFINE_ATTRIBUTE(N_14, T_14, C_14) \
651     DEFINE_ATTRIBUTE(N_15, T_15, C_15) \
652     DEFINE_ATTRIBUTE(N_16, T_16, C_16) \
653     DEFINE_ATTRIBUTE(N_17, T_17, C_17) \
654     DEFINE_ATTRIBUTE(N_18, T_18, C_18) \
655     DEFINE_ATTRIBUTE(N_19, T_19, C_19) \
656   protected: \
657     START_INIT() \
658       SET_ATTRIBUTE(N_0, T_0, AN_0) \
659       SET_ATTRIBUTE(N_1, T_1, AN_1) \
660       SET_ATTRIBUTE(N_2, T_2, AN_2) \
661       SET_ATTRIBUTE(N_3, T_3, AN_3) \
662       SET_ATTRIBUTE(N_4, T_4, AN_4) \
663       SET_ATTRIBUTE(N_5, T_5, AN_5) \
664       SET_ATTRIBUTE(N_6, T_6, AN_6) \
665       SET_ATTRIBUTE(N_7, T_7, AN_7) \
666       SET_ATTRIBUTE(N_8, T_8, AN_8) \
667       SET_ATTRIBUTE(N_9, T_9, AN_9) \
668       SET_ATTRIBUTE(N_10, T_10, AN_10) \
669       SET_ATTRIBUTE(N_11, T_11, AN_11) \
670       SET_ATTRIBUTE(N_12, T_12, AN_12) \
671       SET_ATTRIBUTE(N_13, T_13, AN_13) \
672       SET_ATTRIBUTE(N_14, T_14, AN_14) \
673       SET_ATTRIBUTE(N_15, T_15, AN_15) \
674       SET_ATTRIBUTE(N_16, T_16, AN_16) \
675       SET_ATTRIBUTE(N_17, T_17, AN_17) \
676       SET_ATTRIBUTE(N_18, T_18, AN_18) \
677       SET_ATTRIBUTE(N_19, T_19, AN_19) \
678     END_INIT() \
679   public:
680
681 //--------------------------------------------------------------------------------------
682 #define INTERFACE_21(KIND, \
683                      N_0, AN_0, T_0, C_0, \
684                      N_1, AN_1, T_1, C_1, \
685                      N_2, AN_2, T_2, C_2, \
686                      N_3, AN_3, T_3, C_3, \
687                      N_4, AN_4, T_4, C_4, \
688                      N_5, AN_5, T_5, C_5, \
689                      N_6, AN_6, T_6, C_6, \
690                      N_7, AN_7, T_7, C_7, \
691                      N_8, AN_8, T_8, C_8, \
692                      N_9, AN_9, T_9, C_9, \
693                      N_10, AN_10, T_10, C_10, \
694                      N_11, AN_11, T_11, C_11, \
695                      N_12, AN_12, T_12, C_12, \
696                      N_13, AN_13, T_13, C_13, \
697                      N_14, AN_14, T_14, C_14, \
698                      N_15, AN_15, T_15, C_15, \
699                      N_16, AN_16, T_16, C_16, \
700                      N_17, AN_17, T_17, C_17, \
701                      N_18, AN_18, T_18, C_18, \
702                      N_19, AN_19, T_19, C_19, \
703                      N_20, AN_20, T_20, C_20) \
704   public: \
705     INTERFACE_COMMON(KIND) \
706     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
707     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
708     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
709     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
710     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
711     DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
712     DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
713     DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
714     DEFINE_ATTRIBUTE(N_8, T_8, C_8) \
715     DEFINE_ATTRIBUTE(N_9, T_9, C_9) \
716     DEFINE_ATTRIBUTE(N_10, T_10, C_10) \
717     DEFINE_ATTRIBUTE(N_11, T_11, C_11) \
718     DEFINE_ATTRIBUTE(N_12, T_12, C_12) \
719     DEFINE_ATTRIBUTE(N_13, T_13, C_13) \
720     DEFINE_ATTRIBUTE(N_14, T_14, C_14) \
721     DEFINE_ATTRIBUTE(N_15, T_15, C_15) \
722     DEFINE_ATTRIBUTE(N_16, T_16, C_16) \
723     DEFINE_ATTRIBUTE(N_17, T_17, C_17) \
724     DEFINE_ATTRIBUTE(N_18, T_18, C_18) \
725     DEFINE_ATTRIBUTE(N_19, T_19, C_19) \
726     DEFINE_ATTRIBUTE(N_20, T_20, C_20) \
727   protected: \
728     START_INIT() \
729       SET_ATTRIBUTE(N_0, T_0, AN_0) \
730       SET_ATTRIBUTE(N_1, T_1, AN_1) \
731       SET_ATTRIBUTE(N_2, T_2, AN_2) \
732       SET_ATTRIBUTE(N_3, T_3, AN_3) \
733       SET_ATTRIBUTE(N_4, T_4, AN_4) \
734       SET_ATTRIBUTE(N_5, T_5, AN_5) \
735       SET_ATTRIBUTE(N_6, T_6, AN_6) \
736       SET_ATTRIBUTE(N_7, T_7, AN_7) \
737       SET_ATTRIBUTE(N_8, T_8, AN_8) \
738       SET_ATTRIBUTE(N_9, T_9, AN_9) \
739       SET_ATTRIBUTE(N_10, T_10, AN_10) \
740       SET_ATTRIBUTE(N_11, T_11, AN_11) \
741       SET_ATTRIBUTE(N_12, T_12, AN_12) \
742       SET_ATTRIBUTE(N_13, T_13, AN_13) \
743       SET_ATTRIBUTE(N_14, T_14, AN_14) \
744       SET_ATTRIBUTE(N_15, T_15, AN_15) \
745       SET_ATTRIBUTE(N_16, T_16, AN_16) \
746       SET_ATTRIBUTE(N_17, T_17, AN_17) \
747       SET_ATTRIBUTE(N_18, T_18, AN_18) \
748       SET_ATTRIBUTE(N_19, T_19, AN_19) \
749       SET_ATTRIBUTE(N_20, T_20, AN_20) \
750     END_INIT() \
751   public:
752
753 //--------------------------------------------------------------------------------------
754 #define INTERFACE_24(KIND, \
755                      N_0, AN_0, T_0, C_0, \
756                      N_1, AN_1, T_1, C_1, \
757                      N_2, AN_2, T_2, C_2, \
758                      N_3, AN_3, T_3, C_3, \
759                      N_4, AN_4, T_4, C_4, \
760                      N_5, AN_5, T_5, C_5, \
761                      N_6, AN_6, T_6, C_6, \
762                      N_7, AN_7, T_7, C_7, \
763                      N_8, AN_8, T_8, C_8, \
764                      N_9, AN_9, T_9, C_9, \
765                      N_10, AN_10, T_10, C_10, \
766                      N_11, AN_11, T_11, C_11, \
767                      N_12, AN_12, T_12, C_12, \
768                      N_13, AN_13, T_13, C_13, \
769                      N_14, AN_14, T_14, C_14, \
770                      N_15, AN_15, T_15, C_15, \
771                      N_16, AN_16, T_16, C_16, \
772                      N_17, AN_17, T_17, C_17, \
773                      N_18, AN_18, T_18, C_18, \
774                      N_19, AN_19, T_19, C_19, \
775                      N_20, AN_20, T_20, C_20, \
776                      N_21, AN_21, T_21, C_21, \
777                      N_22, AN_22, T_22, C_22, \
778                      N_23, AN_23, T_23, C_23) \
779   public: \
780     INTERFACE_COMMON(KIND) \
781     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
782     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
783     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
784     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
785     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
786     DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
787     DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
788     DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
789     DEFINE_ATTRIBUTE(N_8, T_8, C_8) \
790     DEFINE_ATTRIBUTE(N_9, T_9, C_9) \
791     DEFINE_ATTRIBUTE(N_10, T_10, C_10) \
792     DEFINE_ATTRIBUTE(N_11, T_11, C_11) \
793     DEFINE_ATTRIBUTE(N_12, T_12, C_12) \
794     DEFINE_ATTRIBUTE(N_13, T_13, C_13) \
795     DEFINE_ATTRIBUTE(N_14, T_14, C_14) \
796     DEFINE_ATTRIBUTE(N_15, T_15, C_15) \
797     DEFINE_ATTRIBUTE(N_16, T_16, C_16) \
798     DEFINE_ATTRIBUTE(N_17, T_17, C_17) \
799     DEFINE_ATTRIBUTE(N_18, T_18, C_18) \
800     DEFINE_ATTRIBUTE(N_19, T_19, C_19) \
801     DEFINE_ATTRIBUTE(N_20, T_20, C_20) \
802     DEFINE_ATTRIBUTE(N_21, T_21, C_21) \
803     DEFINE_ATTRIBUTE(N_22, T_22, C_22) \
804     DEFINE_ATTRIBUTE(N_23, T_23, C_23) \
805   protected: \
806     START_INIT() \
807       SET_ATTRIBUTE(N_0, T_0, AN_0) \
808       SET_ATTRIBUTE(N_1, T_1, AN_1) \
809       SET_ATTRIBUTE(N_2, T_2, AN_2) \
810       SET_ATTRIBUTE(N_3, T_3, AN_3) \
811       SET_ATTRIBUTE(N_4, T_4, AN_4) \
812       SET_ATTRIBUTE(N_5, T_5, AN_5) \
813       SET_ATTRIBUTE(N_6, T_6, AN_6) \
814       SET_ATTRIBUTE(N_7, T_7, AN_7) \
815       SET_ATTRIBUTE(N_8, T_8, AN_8) \
816       SET_ATTRIBUTE(N_9, T_9, AN_9) \
817       SET_ATTRIBUTE(N_10, T_10, AN_10) \
818       SET_ATTRIBUTE(N_11, T_11, AN_11) \
819       SET_ATTRIBUTE(N_12, T_12, AN_12) \
820       SET_ATTRIBUTE(N_13, T_13, AN_13) \
821       SET_ATTRIBUTE(N_14, T_14, AN_14) \
822       SET_ATTRIBUTE(N_15, T_15, AN_15) \
823       SET_ATTRIBUTE(N_16, T_16, AN_16) \
824       SET_ATTRIBUTE(N_17, T_17, AN_17) \
825       SET_ATTRIBUTE(N_18, T_18, AN_18) \
826       SET_ATTRIBUTE(N_19, T_19, AN_19) \
827       SET_ATTRIBUTE(N_20, T_20, AN_20) \
828       SET_ATTRIBUTE(N_21, T_21, AN_21) \
829       SET_ATTRIBUTE(N_22, T_22, AN_22) \
830       SET_ATTRIBUTE(N_23, T_23, AN_23) \
831     END_INIT() \
832   public:
833
834 //--------------------------------------------------------------------------------------
835 #define INTERFACE_25(KIND, \
836                      N_0, AN_0, T_0, C_0, \
837                      N_1, AN_1, T_1, C_1, \
838                      N_2, AN_2, T_2, C_2, \
839                      N_3, AN_3, T_3, C_3, \
840                      N_4, AN_4, T_4, C_4, \
841                      N_5, AN_5, T_5, C_5, \
842                      N_6, AN_6, T_6, C_6, \
843                      N_7, AN_7, T_7, C_7, \
844                      N_8, AN_8, T_8, C_8, \
845                      N_9, AN_9, T_9, C_9, \
846                      N_10, AN_10, T_10, C_10, \
847                      N_11, AN_11, T_11, C_11, \
848                      N_12, AN_12, T_12, C_12, \
849                      N_13, AN_13, T_13, C_13, \
850                      N_14, AN_14, T_14, C_14, \
851                      N_15, AN_15, T_15, C_15, \
852                      N_16, AN_16, T_16, C_16, \
853                      N_17, AN_17, T_17, C_17, \
854                      N_18, AN_18, T_18, C_18, \
855                      N_19, AN_19, T_19, C_19, \
856                      N_20, AN_20, T_20, C_20, \
857                      N_21, AN_21, T_21, C_21, \
858                      N_22, AN_22, T_22, C_22, \
859                      N_23, AN_23, T_23, C_23, \
860                      N_24, AN_24, T_24, C_24) \
861   public: \
862     INTERFACE_COMMON(KIND) \
863     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
864     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
865     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
866     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
867     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
868     DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
869     DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
870     DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
871     DEFINE_ATTRIBUTE(N_8, T_8, C_8) \
872     DEFINE_ATTRIBUTE(N_9, T_9, C_9) \
873     DEFINE_ATTRIBUTE(N_10, T_10, C_10) \
874     DEFINE_ATTRIBUTE(N_11, T_11, C_11) \
875     DEFINE_ATTRIBUTE(N_12, T_12, C_12) \
876     DEFINE_ATTRIBUTE(N_13, T_13, C_13) \
877     DEFINE_ATTRIBUTE(N_14, T_14, C_14) \
878     DEFINE_ATTRIBUTE(N_15, T_15, C_15) \
879     DEFINE_ATTRIBUTE(N_16, T_16, C_16) \
880     DEFINE_ATTRIBUTE(N_17, T_17, C_17) \
881     DEFINE_ATTRIBUTE(N_18, T_18, C_18) \
882     DEFINE_ATTRIBUTE(N_19, T_19, C_19) \
883     DEFINE_ATTRIBUTE(N_20, T_20, C_20) \
884     DEFINE_ATTRIBUTE(N_21, T_21, C_21) \
885     DEFINE_ATTRIBUTE(N_22, T_22, C_22) \
886     DEFINE_ATTRIBUTE(N_23, T_23, C_23) \
887     DEFINE_ATTRIBUTE(N_24, T_24, C_24) \
888   protected: \
889     START_INIT() \
890       SET_ATTRIBUTE(N_0, T_0, AN_0) \
891       SET_ATTRIBUTE(N_1, T_1, AN_1) \
892       SET_ATTRIBUTE(N_2, T_2, AN_2) \
893       SET_ATTRIBUTE(N_3, T_3, AN_3) \
894       SET_ATTRIBUTE(N_4, T_4, AN_4) \
895       SET_ATTRIBUTE(N_5, T_5, AN_5) \
896       SET_ATTRIBUTE(N_6, T_6, AN_6) \
897       SET_ATTRIBUTE(N_7, T_7, AN_7) \
898       SET_ATTRIBUTE(N_8, T_8, AN_8) \
899       SET_ATTRIBUTE(N_9, T_9, AN_9) \
900       SET_ATTRIBUTE(N_10, T_10, AN_10) \
901       SET_ATTRIBUTE(N_11, T_11, AN_11) \
902       SET_ATTRIBUTE(N_12, T_12, AN_12) \
903       SET_ATTRIBUTE(N_13, T_13, AN_13) \
904       SET_ATTRIBUTE(N_14, T_14, AN_14) \
905       SET_ATTRIBUTE(N_15, T_15, AN_15) \
906       SET_ATTRIBUTE(N_16, T_16, AN_16) \
907       SET_ATTRIBUTE(N_17, T_17, AN_17) \
908       SET_ATTRIBUTE(N_18, T_18, AN_18) \
909       SET_ATTRIBUTE(N_19, T_19, AN_19) \
910       SET_ATTRIBUTE(N_20, T_20, AN_20) \
911       SET_ATTRIBUTE(N_21, T_21, AN_21) \
912       SET_ATTRIBUTE(N_22, T_22, AN_22) \
913       SET_ATTRIBUTE(N_23, T_23, AN_23) \
914       SET_ATTRIBUTE(N_24, T_24, AN_24) \
915     END_INIT() \
916   public:
917
918
919 //--------------------------------------------------------------------------------------
920 #define INTERFACE_27(KIND, \
921                      N_0, AN_0, T_0, C_0, \
922                      N_1, AN_1, T_1, C_1, \
923                      N_2, AN_2, T_2, C_2, \
924                      N_3, AN_3, T_3, C_3, \
925                      N_4, AN_4, T_4, C_4, \
926                      N_5, AN_5, T_5, C_5, \
927                      N_6, AN_6, T_6, C_6, \
928                      N_7, AN_7, T_7, C_7, \
929                      N_8, AN_8, T_8, C_8, \
930                      N_9, AN_9, T_9, C_9, \
931                      N_10, AN_10, T_10, C_10, \
932                      N_11, AN_11, T_11, C_11, \
933                      N_12, AN_12, T_12, C_12, \
934                      N_13, AN_13, T_13, C_13, \
935                      N_14, AN_14, T_14, C_14, \
936                      N_15, AN_15, T_15, C_15, \
937                      N_16, AN_16, T_16, C_16, \
938                      N_17, AN_17, T_17, C_17, \
939                      N_18, AN_18, T_18, C_18, \
940                      N_19, AN_19, T_19, C_19, \
941                      N_20, AN_20, T_20, C_20, \
942                      N_21, AN_21, T_21, C_21, \
943                      N_22, AN_22, T_22, C_22, \
944                      N_23, AN_23, T_23, C_23, \
945                      N_24, AN_24, T_24, C_24, \
946                      N_25, AN_25, T_25, C_25, \
947                      N_26, AN_26, T_26, C_26) \
948   public: \
949     INTERFACE_COMMON(KIND) \
950     DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
951     DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
952     DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
953     DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
954     DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
955     DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
956     DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
957     DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
958     DEFINE_ATTRIBUTE(N_8, T_8, C_8) \
959     DEFINE_ATTRIBUTE(N_9, T_9, C_9) \
960     DEFINE_ATTRIBUTE(N_10, T_10, C_10) \
961     DEFINE_ATTRIBUTE(N_11, T_11, C_11) \
962     DEFINE_ATTRIBUTE(N_12, T_12, C_12) \
963     DEFINE_ATTRIBUTE(N_13, T_13, C_13) \
964     DEFINE_ATTRIBUTE(N_14, T_14, C_14) \
965     DEFINE_ATTRIBUTE(N_15, T_15, C_15) \
966     DEFINE_ATTRIBUTE(N_16, T_16, C_16) \
967     DEFINE_ATTRIBUTE(N_17, T_17, C_17) \
968     DEFINE_ATTRIBUTE(N_18, T_18, C_18) \
969     DEFINE_ATTRIBUTE(N_19, T_19, C_19) \
970     DEFINE_ATTRIBUTE(N_20, T_20, C_20) \
971     DEFINE_ATTRIBUTE(N_21, T_21, C_21) \
972     DEFINE_ATTRIBUTE(N_22, T_22, C_22) \
973     DEFINE_ATTRIBUTE(N_23, T_23, C_23) \
974     DEFINE_ATTRIBUTE(N_24, T_24, C_24) \
975     DEFINE_ATTRIBUTE(N_25, T_25, C_25) \
976     DEFINE_ATTRIBUTE(N_26, T_26, C_26) \
977   protected: \
978     START_INIT() \
979       SET_ATTRIBUTE(N_0, T_0, AN_0) \
980       SET_ATTRIBUTE(N_1, T_1, AN_1) \
981       SET_ATTRIBUTE(N_2, T_2, AN_2) \
982       SET_ATTRIBUTE(N_3, T_3, AN_3) \
983       SET_ATTRIBUTE(N_4, T_4, AN_4) \
984       SET_ATTRIBUTE(N_5, T_5, AN_5) \
985       SET_ATTRIBUTE(N_6, T_6, AN_6) \
986       SET_ATTRIBUTE(N_7, T_7, AN_7) \
987       SET_ATTRIBUTE(N_8, T_8, AN_8) \
988       SET_ATTRIBUTE(N_9, T_9, AN_9) \
989       SET_ATTRIBUTE(N_10, T_10, AN_10) \
990       SET_ATTRIBUTE(N_11, T_11, AN_11) \
991       SET_ATTRIBUTE(N_12, T_12, AN_12) \
992       SET_ATTRIBUTE(N_13, T_13, AN_13) \
993       SET_ATTRIBUTE(N_14, T_14, AN_14) \
994       SET_ATTRIBUTE(N_15, T_15, AN_15) \
995       SET_ATTRIBUTE(N_16, T_16, AN_16) \
996       SET_ATTRIBUTE(N_17, T_17, AN_17) \
997       SET_ATTRIBUTE(N_18, T_18, AN_18) \
998       SET_ATTRIBUTE(N_19, T_19, AN_19) \
999       SET_ATTRIBUTE(N_20, T_20, AN_20) \
1000       SET_ATTRIBUTE(N_21, T_21, AN_21) \
1001       SET_ATTRIBUTE(N_22, T_22, AN_22) \
1002       SET_ATTRIBUTE(N_23, T_23, AN_23) \
1003       SET_ATTRIBUTE(N_24, T_24, AN_24) \
1004       SET_ATTRIBUTE(N_25, T_25, AN_25) \
1005       SET_ATTRIBUTE(N_26, T_26, AN_26) \
1006     END_INIT() \
1007   public:
1008
1009 //--------------------------------------------------------------------------------------
1010 #endif /* SRC_MODELHIGHAPI_MODELHIGHAPI_MACRO_H_ */