Ariles
base.h
Go to the documentation of this file.
1 /**
2  @file
3  @author Alexander Sherikov
4 
5  @copyright 2014-2017 INRIA. Licensed under the Apache License, Version 2.0.
6  (see @ref LICENSE or http://www.apache.org/licenses/LICENSE-2.0)
7 
8  @copyright 2017-2020 Alexander Sherikov, Licensed under the Apache License, Version 2.0.
9  (see @ref LICENSE or http://www.apache.org/licenses/LICENSE-2.0)
10 
11  @brief
12 */
13 
14 #pragma once
15 
16 
17 #ifdef ARILES_ENABLED
18 namespace ariles
19 {
20 # define ARILES_USE_BASE(Base) \
21  using Base::arilesVirtualVisit; \
22  using Base::arilesGetParameters;
23 
24  // 10
25  template <
26  class t_B0,
27  class t_B1 = void,
28  class t_B2 = void,
29  class t_B3 = void,
30  class t_B4 = void,
31  class t_B5 = void,
32  class t_B6 = void,
33  class t_B7 = void,
34  class t_B8 = void,
35  class t_B9 = void>
36  class ARILES_VISIBILITY_ATTRIBUTE Base : public ariles::Ariles,
37  public t_B0,
38  public t_B1,
39  public t_B2,
40  public t_B3,
41  public t_B4,
42  public t_B5,
43  public t_B6,
44  public t_B7,
45  public t_B8,
46  public t_B9
47  {
48  protected:
49  Base()
50  {
51  }
52  ~Base()
53  {
54  }
55 
56  public:
57  ARILES_USE_BASE(t_B0)
58  ARILES_USE_BASE(t_B1)
59  ARILES_USE_BASE(t_B2)
60  ARILES_USE_BASE(t_B3)
61  ARILES_USE_BASE(t_B4)
62  ARILES_USE_BASE(t_B5)
63  ARILES_USE_BASE(t_B6)
64  ARILES_USE_BASE(t_B7)
65  ARILES_USE_BASE(t_B8)
66  ARILES_USE_BASE(t_B9)
67  };
68 
69  // 9
70  template <class t_B0, class t_B1, class t_B2, class t_B3, class t_B4, class t_B5, class t_B6, class t_B7, class t_B8>
71  class ARILES_VISIBILITY_ATTRIBUTE Base<t_B0, t_B1, t_B2, t_B3, t_B4, t_B5, t_B6, t_B7, t_B8>
72  : public ariles::Ariles,
73  public t_B0,
74  public t_B1,
75  public t_B2,
76  public t_B3,
77  public t_B4,
78  public t_B5,
79  public t_B6,
80  public t_B7,
81  public t_B8
82  {
83  protected:
84  Base()
85  {
86  }
87  ~Base()
88  {
89  }
90 
91  public:
92  ARILES_USE_BASE(t_B0)
93  ARILES_USE_BASE(t_B1)
94  ARILES_USE_BASE(t_B2)
95  ARILES_USE_BASE(t_B3)
96  ARILES_USE_BASE(t_B4)
97  ARILES_USE_BASE(t_B5)
98  ARILES_USE_BASE(t_B6)
99  ARILES_USE_BASE(t_B7)
100  ARILES_USE_BASE(t_B8)
101  };
102 
103  // 8
104  template <class t_B0, class t_B1, class t_B2, class t_B3, class t_B4, class t_B5, class t_B6, class t_B7>
105  class ARILES_VISIBILITY_ATTRIBUTE Base<t_B0, t_B1, t_B2, t_B3, t_B4, t_B5, t_B6, t_B7> : public ariles::Ariles,
106  public t_B0,
107  public t_B1,
108  public t_B2,
109  public t_B3,
110  public t_B4,
111  public t_B5,
112  public t_B6,
113  public t_B7
114  {
115  protected:
116  Base()
117  {
118  }
119  ~Base()
120  {
121  }
122 
123  public:
124  ARILES_USE_BASE(t_B0)
125  ARILES_USE_BASE(t_B1)
126  ARILES_USE_BASE(t_B2)
127  ARILES_USE_BASE(t_B3)
128  ARILES_USE_BASE(t_B4)
129  ARILES_USE_BASE(t_B5)
130  ARILES_USE_BASE(t_B6)
131  ARILES_USE_BASE(t_B7)
132  };
133 
134  // 7
135  template <class t_B0, class t_B1, class t_B2, class t_B3, class t_B4, class t_B5, class t_B6>
136  class ARILES_VISIBILITY_ATTRIBUTE Base<t_B0, t_B1, t_B2, t_B3, t_B4, t_B5, t_B6>
137  : public ariles::Ariles, public t_B0, public t_B1, public t_B2, public t_B3, public t_B4, public t_B5, public t_B6
138  {
139  protected:
140  Base()
141  {
142  }
143  ~Base()
144  {
145  }
146 
147  public:
148  ARILES_USE_BASE(t_B0)
149  ARILES_USE_BASE(t_B1)
150  ARILES_USE_BASE(t_B2)
151  ARILES_USE_BASE(t_B3)
152  ARILES_USE_BASE(t_B4)
153  ARILES_USE_BASE(t_B5)
154  ARILES_USE_BASE(t_B6)
155  };
156 
157  // 6
158  template <class t_B0, class t_B1, class t_B2, class t_B3, class t_B4, class t_B5>
159  class ARILES_VISIBILITY_ATTRIBUTE Base<t_B0, t_B1, t_B2, t_B3, t_B4, t_B5>
160  : public ariles::Ariles, public t_B0, public t_B1, public t_B2, public t_B3, public t_B4, public t_B5
161  {
162  protected:
163  Base()
164  {
165  }
166  ~Base()
167  {
168  }
169 
170  public:
171  ARILES_USE_BASE(t_B0)
172  ARILES_USE_BASE(t_B1)
173  ARILES_USE_BASE(t_B2)
174  ARILES_USE_BASE(t_B3)
175  ARILES_USE_BASE(t_B4)
176  ARILES_USE_BASE(t_B5)
177  };
178 
179  // 5
180  template <class t_B0, class t_B1, class t_B2, class t_B3, class t_B4>
181  class ARILES_VISIBILITY_ATTRIBUTE Base<t_B0, t_B1, t_B2, t_B3, t_B4>
182  : public ariles::Ariles, public t_B0, public t_B1, public t_B2, public t_B3, public t_B4
183  {
184  protected:
185  Base()
186  {
187  }
188  ~Base()
189  {
190  }
191 
192  public:
193  ARILES_USE_BASE(t_B0)
194  ARILES_USE_BASE(t_B1)
195  ARILES_USE_BASE(t_B2)
196  ARILES_USE_BASE(t_B3)
197  ARILES_USE_BASE(t_B4)
198  };
199 
200  // 4
201  template <class t_B0, class t_B1, class t_B2, class t_B3>
202  class ARILES_VISIBILITY_ATTRIBUTE Base<t_B0, t_B1, t_B2, t_B3>
203  : public ariles::Ariles, public t_B0, public t_B1, public t_B2, public t_B3
204  {
205  protected:
206  Base()
207  {
208  }
209  ~Base()
210  {
211  }
212 
213  public:
214  ARILES_USE_BASE(t_B0)
215  ARILES_USE_BASE(t_B1)
216  ARILES_USE_BASE(t_B2)
217  ARILES_USE_BASE(t_B3)
218  };
219 
220  // 3
221  template <class t_B0, class t_B1, class t_B2>
222  class ARILES_VISIBILITY_ATTRIBUTE Base<t_B0, t_B1, t_B2>
223  : public ariles::Ariles, public t_B0, public t_B1, public t_B2
224  {
225  protected:
226  Base()
227  {
228  }
229  ~Base()
230  {
231  }
232 
233  public:
234  ARILES_USE_BASE(t_B0)
235  ARILES_USE_BASE(t_B1)
236  ARILES_USE_BASE(t_B2)
237  };
238 
239  // 2
240  template <class t_B0, class t_B1>
241  class ARILES_VISIBILITY_ATTRIBUTE Base<t_B0, t_B1> : public ariles::Ariles, public t_B0, public t_B1
242  {
243  protected:
244  Base()
245  {
246  }
247  ~Base()
248  {
249  }
250 
251  public:
252  ARILES_USE_BASE(t_B0)
253  ARILES_USE_BASE(t_B1)
254  };
255 
256  // 1
257  template <class t_B0>
258  class ARILES_VISIBILITY_ATTRIBUTE Base<t_B0> : public ariles::Ariles, public t_B0
259  {
260  protected:
261  Base()
262  {
263  }
264  ~Base()
265  {
266  }
267 
268  public:
269  ARILES_USE_BASE(t_B0)
270  };
271 
272 # undef ARILES_USE_BASE
273 } // namespace ariles
274 
275 #else
276 
277 namespace ariles
278 {
279  // 10
280  template <
281  class t_B0,
282  class t_B1 = void,
283  class t_B2 = void,
284  class t_B3 = void,
285  class t_B4 = void,
286  class t_B5 = void,
287  class t_B6 = void,
288  class t_B7 = void,
289  class t_B8 = void,
290  class t_B9 = void>
292  {
293  protected:
295  {
296  }
298  {
299  }
300  };
301 
302  // 9
303  template <class t_B0, class t_B1, class t_B2, class t_B3, class t_B4, class t_B5, class t_B6, class t_B7, class t_B8>
304  class ARILES_VISIBILITY_ATTRIBUTE Base<t_B0, t_B1, t_B2, t_B3, t_B4, t_B5, t_B6, t_B7, t_B8>
305  {
306  protected:
308  {
309  }
311  {
312  }
313  };
314 
315  // 8
316  template <class t_B0, class t_B1, class t_B2, class t_B3, class t_B4, class t_B5, class t_B6, class t_B7>
317  class ARILES_VISIBILITY_ATTRIBUTE Base<t_B0, t_B1, t_B2, t_B3, t_B4, t_B5, t_B6, t_B7>
318  {
319  protected:
321  {
322  }
324  {
325  }
326  };
327 
328  // 7
329  template <class t_B0, class t_B1, class t_B2, class t_B3, class t_B4, class t_B5, class t_B6>
330  class ARILES_VISIBILITY_ATTRIBUTE Base<t_B0, t_B1, t_B2, t_B3, t_B4, t_B5, t_B6>
331  {
332  protected:
334  {
335  }
337  {
338  }
339  };
340 
341  // 6
342  template <class t_B0, class t_B1, class t_B2, class t_B3, class t_B4, class t_B5>
343  class ARILES_VISIBILITY_ATTRIBUTE Base<t_B0, t_B1, t_B2, t_B3, t_B4, t_B5>
344  {
345  protected:
347  {
348  }
350  {
351  }
352  };
353 
354  // 5
355  template <class t_B0, class t_B1, class t_B2, class t_B3, class t_B4>
356  class ARILES_VISIBILITY_ATTRIBUTE Base<t_B0, t_B1, t_B2, t_B3, t_B4>
357  {
358  protected:
360  {
361  }
363  {
364  }
365  };
366 
367  // 4
368  template <class t_B0, class t_B1, class t_B2, class t_B3>
369  class ARILES_VISIBILITY_ATTRIBUTE Base<t_B0, t_B1, t_B2, t_B3>
370  {
371  protected:
373  {
374  }
376  {
377  }
378  };
379 
380  // 3
381  template <class t_B0, class t_B1, class t_B2>
382  class ARILES_VISIBILITY_ATTRIBUTE Base<t_B0, t_B1, t_B2>
383  {
384  protected:
386  {
387  }
389  {
390  }
391  };
392 
393  // 2
394  template <class t_B0, class t_B1>
396  {
397  protected:
399  {
400  }
402  {
403  }
404  };
405 
406  // 1
407  template <class t_B0>
409  {
410  protected:
412  {
413  }
415  {
416  }
417  };
418 } // namespace ariles
419 
420 #endif
#define ARILES_VISIBILITY_ATTRIBUTE
Definition: helpers.h:69
Definition: basic.h:17