31#ifndef ETL_VISITOR_INCLUDED
32#define ETL_VISITOR_INCLUDED
55#if ETL_USING_CPP11 && !defined(ETL_VISITOR_FORCE_CPP03_IMPLEMENTATION)
61 template <
typename T1,
typename... Types>
68 using visitable<T1>::accept;
69 using visitable<Types...>::accept;
70 using type_list = etl::type_list<T1, Types...>;
77 template <
typename T1>
82 using type_list = etl::type_list<T1>;
84 virtual ~visitable() =
default;
86 virtual void accept(T1&) = 0;
91 template <
typename TList>
92 struct visitable_from_type_list;
94 template <
typename... TTypes>
95 struct visitable_from_type_list<etl::type_list<TTypes...>>
97 using type = etl::visitable<TTypes...>;
100 template <
typename TTypeList>
101 using visitable_from_type_list_t =
typename visitable_from_type_list<TTypeList>::type;
110 template <
typename T1,
typename T2 =
void,
typename T3 =
void,
typename T4 =
void>
117 virtual void accept(T1&) = 0;
118 virtual void accept(T2&) = 0;
119 virtual void accept(T3&) = 0;
120 virtual void accept(T4&) = 0;
128 template <
typename T1,
typename T2,
typename T3>
135 virtual void accept(T1&) = 0;
136 virtual void accept(T2&) = 0;
137 virtual void accept(T3&) = 0;
145 template <
typename T1,
typename T2>
152 virtual void accept(T1&) = 0;
153 virtual void accept(T2&) = 0;
161 template <
typename T1>
168 virtual void accept(T1&) = 0;
181#if ETL_USING_CPP11 && !defined(ETL_VISITOR_FORCE_CPP03_IMPLEMENTATION)
187 template <
typename T1,
typename... Types>
195 using visitor<Types...>::visit;
202 template <
typename T1>
203 class visitor<T1> :
public virtual visitor_tag
207 virtual ~visitor() =
default;
209 virtual void visit(T1) = 0;
214 template <
typename TList>
215 struct visitor_from_type_list;
217 template <
typename... TTypes>
218 struct visitor_from_type_list<etl::type_list<TTypes...>>
220 using type = etl::visitor<TTypes...>;
223 template <
typename TTypeList>
224 using visitor_from_type_list_t =
typename visitor_from_type_list<TTypeList>::type;
233 template <
typename T1,
typename T2 = void,
typename T3 = void,
typename T4 = void,
typename T5 = void,
typename T6 = void,
typename T7 = void,
234 typename T8 = void,
typename T9 = void,
typename T10 = void,
typename T11 = void,
typename T12 = void,
typename T13 = void,
235 typename T14 = void,
typename T15 = void,
typename T16 =
void>
242 virtual void visit(T1) = 0;
243 virtual void visit(T2) = 0;
244 virtual void visit(T3) = 0;
245 virtual void visit(T4) = 0;
246 virtual void visit(T5) = 0;
247 virtual void visit(T6) = 0;
248 virtual void visit(T7) = 0;
249 virtual void visit(T8) = 0;
250 virtual void visit(T9) = 0;
251 virtual void visit(T10) = 0;
252 virtual void visit(T11) = 0;
253 virtual void visit(T12) = 0;
254 virtual void visit(T13) = 0;
255 virtual void visit(T14) = 0;
256 virtual void visit(T15) = 0;
257 virtual void visit(T16) = 0;
265 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
266 typename T11,
typename T12,
typename T13,
typename T14,
typename T15>
267 class visitor<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> :
public visitor_tag
273 virtual void visit(T1) = 0;
274 virtual void visit(T2) = 0;
275 virtual void visit(T3) = 0;
276 virtual void visit(T4) = 0;
277 virtual void visit(T5) = 0;
278 virtual void visit(T6) = 0;
279 virtual void visit(T7) = 0;
280 virtual void visit(T8) = 0;
281 virtual void visit(T9) = 0;
282 virtual void visit(T10) = 0;
283 virtual void visit(T11) = 0;
284 virtual void visit(T12) = 0;
285 virtual void visit(T13) = 0;
286 virtual void visit(T14) = 0;
287 virtual void visit(T15) = 0;
295 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
296 typename T11,
typename T12,
typename T13,
typename T14>
297 class visitor<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> :
public visitor_tag
303 virtual void visit(T1) = 0;
304 virtual void visit(T2) = 0;
305 virtual void visit(T3) = 0;
306 virtual void visit(T4) = 0;
307 virtual void visit(T5) = 0;
308 virtual void visit(T6) = 0;
309 virtual void visit(T7) = 0;
310 virtual void visit(T8) = 0;
311 virtual void visit(T9) = 0;
312 virtual void visit(T10) = 0;
313 virtual void visit(T11) = 0;
314 virtual void visit(T12) = 0;
315 virtual void visit(T13) = 0;
316 virtual void visit(T14) = 0;
324 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
325 typename T11,
typename T12,
typename T13>
326 class visitor<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> :
public visitor_tag
332 virtual void visit(T1) = 0;
333 virtual void visit(T2) = 0;
334 virtual void visit(T3) = 0;
335 virtual void visit(T4) = 0;
336 virtual void visit(T5) = 0;
337 virtual void visit(T6) = 0;
338 virtual void visit(T7) = 0;
339 virtual void visit(T8) = 0;
340 virtual void visit(T9) = 0;
341 virtual void visit(T10) = 0;
342 virtual void visit(T11) = 0;
343 virtual void visit(T12) = 0;
344 virtual void visit(T13) = 0;
352 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
353 typename T11,
typename T12>
354 class visitor<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> :
public visitor_tag
360 virtual void visit(T1) = 0;
361 virtual void visit(T2) = 0;
362 virtual void visit(T3) = 0;
363 virtual void visit(T4) = 0;
364 virtual void visit(T5) = 0;
365 virtual void visit(T6) = 0;
366 virtual void visit(T7) = 0;
367 virtual void visit(T8) = 0;
368 virtual void visit(T9) = 0;
369 virtual void visit(T10) = 0;
370 virtual void visit(T11) = 0;
371 virtual void visit(T12) = 0;
379 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
381 class visitor<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> :
public visitor_tag
387 virtual void visit(T1) = 0;
388 virtual void visit(T2) = 0;
389 virtual void visit(T3) = 0;
390 virtual void visit(T4) = 0;
391 virtual void visit(T5) = 0;
392 virtual void visit(T6) = 0;
393 virtual void visit(T7) = 0;
394 virtual void visit(T8) = 0;
395 virtual void visit(T9) = 0;
396 virtual void visit(T10) = 0;
397 virtual void visit(T11) = 0;
405 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8,
typename T9,
typename T10>
412 virtual void visit(T1) = 0;
413 virtual void visit(T2) = 0;
414 virtual void visit(T3) = 0;
415 virtual void visit(T4) = 0;
416 virtual void visit(T5) = 0;
417 virtual void visit(T6) = 0;
418 virtual void visit(T7) = 0;
419 virtual void visit(T8) = 0;
420 virtual void visit(T9) = 0;
421 virtual void visit(T10) = 0;
429 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8,
typename T9>
436 virtual void visit(T1) = 0;
437 virtual void visit(T2) = 0;
438 virtual void visit(T3) = 0;
439 virtual void visit(T4) = 0;
440 virtual void visit(T5) = 0;
441 virtual void visit(T6) = 0;
442 virtual void visit(T7) = 0;
443 virtual void visit(T8) = 0;
444 virtual void visit(T9) = 0;
452 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
459 virtual void visit(T1) = 0;
460 virtual void visit(T2) = 0;
461 virtual void visit(T3) = 0;
462 virtual void visit(T4) = 0;
463 virtual void visit(T5) = 0;
464 virtual void visit(T6) = 0;
465 virtual void visit(T7) = 0;
466 virtual void visit(T8) = 0;
474 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
481 virtual void visit(T1) = 0;
482 virtual void visit(T2) = 0;
483 virtual void visit(T3) = 0;
484 virtual void visit(T4) = 0;
485 virtual void visit(T5) = 0;
486 virtual void visit(T6) = 0;
487 virtual void visit(T7) = 0;
495 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
502 virtual void visit(T1) = 0;
503 virtual void visit(T2) = 0;
504 virtual void visit(T3) = 0;
505 virtual void visit(T4) = 0;
506 virtual void visit(T5) = 0;
507 virtual void visit(T6) = 0;
515 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
522 virtual void visit(T1) = 0;
523 virtual void visit(T2) = 0;
524 virtual void visit(T3) = 0;
525 virtual void visit(T4) = 0;
526 virtual void visit(T5) = 0;
534 template <
typename T1,
typename T2,
typename T3,
typename T4>
541 virtual void visit(T1) = 0;
542 virtual void visit(T2) = 0;
543 virtual void visit(T3) = 0;
544 virtual void visit(T4) = 0;
552 template <
typename T1,
typename T2,
typename T3>
559 virtual void visit(T1) = 0;
560 virtual void visit(T2) = 0;
561 virtual void visit(T3) = 0;
569 template <
typename T1,
typename T2>
576 virtual void visit(T1) = 0;
577 virtual void visit(T2) = 0;
585 template <
typename T1>
592 virtual void visit(T1) = 0;
601 template <
typename T>
611 template <
typename T>
612 constexpr bool is_visitor_v = etl::is_visitor<T>::value;
bitset_ext
Definition absolute.h:40
Definition type_traits.h:97