SHAPER  9.15.0
ModelHighAPI_Macro.h
1 // Copyright (C) 2014-2025 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 //--------------------------------------------------------------------------------------
540 #define INTERFACE_17(KIND, \
541  N_0, AN_0, T_0, C_0, \
542  N_1, AN_1, T_1, C_1, \
543  N_2, AN_2, T_2, C_2, \
544  N_3, AN_3, T_3, C_3, \
545  N_4, AN_4, T_4, C_4, \
546  N_5, AN_5, T_5, C_5, \
547  N_6, AN_6, T_6, C_6, \
548  N_7, AN_7, T_7, C_7, \
549  N_8, AN_8, T_8, C_8, \
550  N_9, AN_9, T_9, C_9, \
551  N_10, AN_10, T_10, C_10, \
552  N_11, AN_11, T_11, C_11, \
553  N_12, AN_12, T_12, C_12, \
554  N_13, AN_13, T_13, C_13, \
555  N_14, AN_14, T_14, C_14, \
556  N_15, AN_15, T_15, C_15, \
557  N_16, AN_16, T_16, C_16) \
558  public: \
559  INTERFACE_COMMON(KIND) \
560  DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
561  DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
562  DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
563  DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
564  DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
565  DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
566  DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
567  DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
568  DEFINE_ATTRIBUTE(N_8, T_8, C_8) \
569  DEFINE_ATTRIBUTE(N_9, T_9, C_9) \
570  DEFINE_ATTRIBUTE(N_10, T_10, C_10) \
571  DEFINE_ATTRIBUTE(N_11, T_11, C_11) \
572  DEFINE_ATTRIBUTE(N_12, T_12, C_12) \
573  DEFINE_ATTRIBUTE(N_13, T_13, C_13) \
574  DEFINE_ATTRIBUTE(N_14, T_14, C_14) \
575  DEFINE_ATTRIBUTE(N_15, T_15, C_15) \
576  DEFINE_ATTRIBUTE(N_16, T_16, C_16) \
577  protected: \
578  START_INIT() \
579  SET_ATTRIBUTE(N_0, T_0, AN_0) \
580  SET_ATTRIBUTE(N_1, T_1, AN_1) \
581  SET_ATTRIBUTE(N_2, T_2, AN_2) \
582  SET_ATTRIBUTE(N_3, T_3, AN_3) \
583  SET_ATTRIBUTE(N_4, T_4, AN_4) \
584  SET_ATTRIBUTE(N_5, T_5, AN_5) \
585  SET_ATTRIBUTE(N_6, T_6, AN_6) \
586  SET_ATTRIBUTE(N_7, T_7, AN_7) \
587  SET_ATTRIBUTE(N_8, T_8, AN_8) \
588  SET_ATTRIBUTE(N_9, T_9, AN_9) \
589  SET_ATTRIBUTE(N_10, T_10, AN_10) \
590  SET_ATTRIBUTE(N_11, T_11, AN_11) \
591  SET_ATTRIBUTE(N_12, T_12, AN_12) \
592  SET_ATTRIBUTE(N_13, T_13, AN_13) \
593  SET_ATTRIBUTE(N_14, T_14, AN_14) \
594  SET_ATTRIBUTE(N_15, T_15, AN_15) \
595  SET_ATTRIBUTE(N_16, T_16, AN_16) \
596  END_INIT() \
597  public:
598 
599 //--------------------------------------------------------------------------------------
600 #define INTERFACE_21(KIND, \
601  N_0, AN_0, T_0, C_0, \
602  N_1, AN_1, T_1, C_1, \
603  N_2, AN_2, T_2, C_2, \
604  N_3, AN_3, T_3, C_3, \
605  N_4, AN_4, T_4, C_4, \
606  N_5, AN_5, T_5, C_5, \
607  N_6, AN_6, T_6, C_6, \
608  N_7, AN_7, T_7, C_7, \
609  N_8, AN_8, T_8, C_8, \
610  N_9, AN_9, T_9, C_9, \
611  N_10, AN_10, T_10, C_10, \
612  N_11, AN_11, T_11, C_11, \
613  N_12, AN_12, T_12, C_12, \
614  N_13, AN_13, T_13, C_13, \
615  N_14, AN_14, T_14, C_14, \
616  N_15, AN_15, T_15, C_15, \
617  N_16, AN_16, T_16, C_16, \
618  N_17, AN_17, T_17, C_17, \
619  N_18, AN_18, T_18, C_18, \
620  N_19, AN_19, T_19, C_19, \
621  N_20, AN_20, T_20, C_20) \
622  public: \
623  INTERFACE_COMMON(KIND) \
624  DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
625  DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
626  DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
627  DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
628  DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
629  DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
630  DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
631  DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
632  DEFINE_ATTRIBUTE(N_8, T_8, C_8) \
633  DEFINE_ATTRIBUTE(N_9, T_9, C_9) \
634  DEFINE_ATTRIBUTE(N_10, T_10, C_10) \
635  DEFINE_ATTRIBUTE(N_11, T_11, C_11) \
636  DEFINE_ATTRIBUTE(N_12, T_12, C_12) \
637  DEFINE_ATTRIBUTE(N_13, T_13, C_13) \
638  DEFINE_ATTRIBUTE(N_14, T_14, C_14) \
639  DEFINE_ATTRIBUTE(N_15, T_15, C_15) \
640  DEFINE_ATTRIBUTE(N_16, T_16, C_16) \
641  DEFINE_ATTRIBUTE(N_17, T_17, C_17) \
642  DEFINE_ATTRIBUTE(N_18, T_18, C_18) \
643  DEFINE_ATTRIBUTE(N_19, T_19, C_19) \
644  DEFINE_ATTRIBUTE(N_20, T_20, C_20) \
645  protected: \
646  START_INIT() \
647  SET_ATTRIBUTE(N_0, T_0, AN_0) \
648  SET_ATTRIBUTE(N_1, T_1, AN_1) \
649  SET_ATTRIBUTE(N_2, T_2, AN_2) \
650  SET_ATTRIBUTE(N_3, T_3, AN_3) \
651  SET_ATTRIBUTE(N_4, T_4, AN_4) \
652  SET_ATTRIBUTE(N_5, T_5, AN_5) \
653  SET_ATTRIBUTE(N_6, T_6, AN_6) \
654  SET_ATTRIBUTE(N_7, T_7, AN_7) \
655  SET_ATTRIBUTE(N_8, T_8, AN_8) \
656  SET_ATTRIBUTE(N_9, T_9, AN_9) \
657  SET_ATTRIBUTE(N_10, T_10, AN_10) \
658  SET_ATTRIBUTE(N_11, T_11, AN_11) \
659  SET_ATTRIBUTE(N_12, T_12, AN_12) \
660  SET_ATTRIBUTE(N_13, T_13, AN_13) \
661  SET_ATTRIBUTE(N_14, T_14, AN_14) \
662  SET_ATTRIBUTE(N_15, T_15, AN_15) \
663  SET_ATTRIBUTE(N_16, T_16, AN_16) \
664  SET_ATTRIBUTE(N_17, T_17, AN_17) \
665  SET_ATTRIBUTE(N_18, T_18, AN_18) \
666  SET_ATTRIBUTE(N_19, T_19, AN_19) \
667  SET_ATTRIBUTE(N_20, T_20, AN_20) \
668  END_INIT() \
669  public:
670 
671 //--------------------------------------------------------------------------------------
672 #define INTERFACE_25(KIND, \
673  N_0, AN_0, T_0, C_0, \
674  N_1, AN_1, T_1, C_1, \
675  N_2, AN_2, T_2, C_2, \
676  N_3, AN_3, T_3, C_3, \
677  N_4, AN_4, T_4, C_4, \
678  N_5, AN_5, T_5, C_5, \
679  N_6, AN_6, T_6, C_6, \
680  N_7, AN_7, T_7, C_7, \
681  N_8, AN_8, T_8, C_8, \
682  N_9, AN_9, T_9, C_9, \
683  N_10, AN_10, T_10, C_10, \
684  N_11, AN_11, T_11, C_11, \
685  N_12, AN_12, T_12, C_12, \
686  N_13, AN_13, T_13, C_13, \
687  N_14, AN_14, T_14, C_14, \
688  N_15, AN_15, T_15, C_15, \
689  N_16, AN_16, T_16, C_16, \
690  N_17, AN_17, T_17, C_17, \
691  N_18, AN_18, T_18, C_18, \
692  N_19, AN_19, T_19, C_19, \
693  N_20, AN_20, T_20, C_20, \
694  N_21, AN_21, T_21, C_21, \
695  N_22, AN_22, T_22, C_22, \
696  N_23, AN_23, T_23, C_23, \
697  N_24, AN_24, T_24, C_24) \
698  public: \
699  INTERFACE_COMMON(KIND) \
700  DEFINE_ATTRIBUTE(N_0, T_0, C_0) \
701  DEFINE_ATTRIBUTE(N_1, T_1, C_1) \
702  DEFINE_ATTRIBUTE(N_2, T_2, C_2) \
703  DEFINE_ATTRIBUTE(N_3, T_3, C_3) \
704  DEFINE_ATTRIBUTE(N_4, T_4, C_4) \
705  DEFINE_ATTRIBUTE(N_5, T_5, C_5) \
706  DEFINE_ATTRIBUTE(N_6, T_6, C_6) \
707  DEFINE_ATTRIBUTE(N_7, T_7, C_7) \
708  DEFINE_ATTRIBUTE(N_8, T_8, C_8) \
709  DEFINE_ATTRIBUTE(N_9, T_9, C_9) \
710  DEFINE_ATTRIBUTE(N_10, T_10, C_10) \
711  DEFINE_ATTRIBUTE(N_11, T_11, C_11) \
712  DEFINE_ATTRIBUTE(N_12, T_12, C_12) \
713  DEFINE_ATTRIBUTE(N_13, T_13, C_13) \
714  DEFINE_ATTRIBUTE(N_14, T_14, C_14) \
715  DEFINE_ATTRIBUTE(N_15, T_15, C_15) \
716  DEFINE_ATTRIBUTE(N_16, T_16, C_16) \
717  DEFINE_ATTRIBUTE(N_17, T_17, C_17) \
718  DEFINE_ATTRIBUTE(N_18, T_18, C_18) \
719  DEFINE_ATTRIBUTE(N_19, T_19, C_19) \
720  DEFINE_ATTRIBUTE(N_20, T_20, C_20) \
721  DEFINE_ATTRIBUTE(N_21, T_21, C_21) \
722  DEFINE_ATTRIBUTE(N_22, T_22, C_22) \
723  DEFINE_ATTRIBUTE(N_23, T_23, C_23) \
724  DEFINE_ATTRIBUTE(N_24, T_24, C_24) \
725  protected: \
726  START_INIT() \
727  SET_ATTRIBUTE(N_0, T_0, AN_0) \
728  SET_ATTRIBUTE(N_1, T_1, AN_1) \
729  SET_ATTRIBUTE(N_2, T_2, AN_2) \
730  SET_ATTRIBUTE(N_3, T_3, AN_3) \
731  SET_ATTRIBUTE(N_4, T_4, AN_4) \
732  SET_ATTRIBUTE(N_5, T_5, AN_5) \
733  SET_ATTRIBUTE(N_6, T_6, AN_6) \
734  SET_ATTRIBUTE(N_7, T_7, AN_7) \
735  SET_ATTRIBUTE(N_8, T_8, AN_8) \
736  SET_ATTRIBUTE(N_9, T_9, AN_9) \
737  SET_ATTRIBUTE(N_10, T_10, AN_10) \
738  SET_ATTRIBUTE(N_11, T_11, AN_11) \
739  SET_ATTRIBUTE(N_12, T_12, AN_12) \
740  SET_ATTRIBUTE(N_13, T_13, AN_13) \
741  SET_ATTRIBUTE(N_14, T_14, AN_14) \
742  SET_ATTRIBUTE(N_15, T_15, AN_15) \
743  SET_ATTRIBUTE(N_16, T_16, AN_16) \
744  SET_ATTRIBUTE(N_17, T_17, AN_17) \
745  SET_ATTRIBUTE(N_18, T_18, AN_18) \
746  SET_ATTRIBUTE(N_19, T_19, AN_19) \
747  SET_ATTRIBUTE(N_20, T_20, AN_20) \
748  SET_ATTRIBUTE(N_21, T_21, AN_21) \
749  SET_ATTRIBUTE(N_22, T_22, AN_22) \
750  SET_ATTRIBUTE(N_23, T_23, AN_23) \
751  SET_ATTRIBUTE(N_24, T_24, AN_24) \
752  END_INIT() \
753  public:
754 
755 //--------------------------------------------------------------------------------------
756 #endif /* SRC_MODELHIGHAPI_MODELHIGHAPI_MACRO_H_ */