Developer documentation

texp_list.hpp
Go to the documentation of this file.
1 #ifndef realroot_BASE_TYPE_LIST_H
2 #define realroot_BASE_TYPE_LIST_H
3 
4 namespace mmx {
5 
6 namespace texp {
7 
12  template<class A, class B>
14  struct tlist { typedef A car; typedef B cdr; };
15 
19  template< template<class> class TypeFunctor, class TypeList >
20  struct tmap;
21  template< template<class> class TypeFunctor, class Head, class Tail>
22  struct tmap< TypeFunctor, tlist<Head,Tail> >
23  {
26  };
27  template< template<class> class TypeFunctor, class Head>
28  struct tmap< TypeFunctor, tlist<Head,null_t> >
29  {
31  };
32 
34  template
35  <
36  typename T1 = null_t, typename T2 = null_t, typename T3 = null_t,
37  typename T4 = null_t, typename T5 = null_t, typename T6 = null_t,
38  typename T7 = null_t, typename T8 = null_t, typename T9 = null_t,
39  typename T10 = null_t, typename T11 = null_t, typename T12 = null_t,
40  typename T13 = null_t, typename T14 = null_t, typename T15 = null_t,
41  typename T16 = null_t, typename T17 = null_t, typename T18 = null_t
42  >
43  struct gentlist
44  {
45  private:
46  typedef typename gentlist
47  <
48  T2 , T3 , T4 ,
49  T5 , T6 , T7 ,
50  T8 , T9 , T10,
51  T11, T12, T13,
52  T14, T15, T16,
53  T17, T18 >
54  ::T cdr;
55  typedef T1 car;
56  public:
57  typedef tlist<car,cdr> T;
58  };
59  template< typename X>
60  struct gentlist< X, null_t >
61  {
62  typedef tlist<X,null_t> T;
63  };
64 
66  template < typename L >
67  struct sfirstnnl { typedef L T; };
68  template < typename car, typename cdr >
69  struct sfirstnnl< tlist<car,cdr> > { typedef car T; };
70  template < typename cdr > struct sfirstnnl< tlist< null_t, cdr > >
71  { typedef typename sfirstnnl< cdr >::T T; };
72  template <> struct sfirstnnl< tlist<null_t, null_t> > { typedef null_t T; };
73 
74  template <
75  typename T1 = null_t, typename T2 = null_t, typename T3 = null_t,
76  typename T4 = null_t, typename T5 = null_t, typename T6 = null_t,
77  typename T7 = null_t, typename T8 = null_t, typename T9 = null_t,
78  typename T10 = null_t, typename T11 = null_t, typename T12 = null_t,
79  typename T13 = null_t, typename T14 = null_t, typename T15 = null_t,
80  typename T16 = null_t, typename T17 = null_t, typename T18 = null_t
81  >
82  struct sfirstnn
83  {
85  typedef typename sfirstnnl<L>::T T;
86  };
87 
88  /*
89  template<class List> struct reverse;
90  template<class List, class RList> struct reversal;
91  template<class List> struct reversal<type::null_t,List> { typedef List T; };
92  template<class car, class cdr, class List>
93  struct reversal< tlist<car,cdr>, List > { typedef typename reversal<cdr, tlist<car,List> >::T T; };
94 
95  template<class car, class cdr>
96  struct reverse< tlist<car,cdr> >
97  {
98  typedef typename reversal< cdr , tlist<car,type::null_t> >::T T;
99  };
100  */
101 };
102 
103 }// end namespace mmx
104 
105 #endif
null_t T
Definition: texp_list.hpp:72
TMPL X
Definition: polynomial_operators.hpp:148
structure defining a the empty list
Definition: texp_bool.hpp:11
gentlist< T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18 >::T L
Definition: texp_list.hpp:84
Definition: texp_list.hpp:20
select the first non null type of a type-list.
Definition: texp_list.hpp:67
type list node
Definition: texp_list.hpp:14
car T
Definition: texp_list.hpp:69
tlist< car, cdr > T
Definition: texp_list.hpp:57
A car
Definition: texp_list.hpp:14
tlist< typename TypeFunctor< Head >::T, typename tmap< TypeFunctor, Tail >::T > T
Definition: texp_list.hpp:25
sfirstnnl< cdr >::T T
Definition: texp_list.hpp:71
helper for type list definition
Definition: texp_list.hpp:43
tlist< X, null_t > T
Definition: texp_list.hpp:62
sfirstnnl< L >::T T
Definition: texp_list.hpp:85
Definition: texp_list.hpp:82
L T
Definition: texp_list.hpp:67
B cdr
Definition: texp_list.hpp:14
Definition: array.hpp:12
tlist< typename TypeFunctor< Head >::T, null_t > T
Definition: texp_list.hpp:30
Home