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