Developer documentation

texp_tests.hpp
Go to the documentation of this file.
1 #ifndef realroot_BASE_TYPE_TESTS_H
2 #define realroot_BASE_TYPE_TESTS_H
3 
4 #include <realroot/texp_bool.hpp>
5 
6 namespace mmx {
7 
8 namespace texp
9 {
10 
12  template <class X, class Y>
13  struct equal
14  {
15  enum { V = 1 };
16  typedef false_t T;
17  };
18 
19  template<class X>
20  struct equal<X,X>
21  {
22  enum { V = 1 };
23  typedef true_t T;
24  };
25 
27  template<class X, class A, class B>
28  struct tselect { typedef A T; };
29  template<class A, class B>
30  struct tselect<false_t, A, B> { typedef B T; };
31  template<class A, class B>
32  struct tselect<null_t,A, B> { typedef B T; };
33 
35  template<int k, class A, class B>
36  struct vselect { typedef A T; };
37  template<class A, class B>
38  struct vselect<0,A,B> { typedef B T; };
39 
40  template< typename X >
41  struct tnot
42  {
43  typedef false_t T;
44  };
45 
46  template<>
47  struct tnot< false_t > { typedef true_t T; };
48  template<>
49  struct tnot< null_t > { typedef true_t T; };
50  template<class X>
51  struct is_ptr{ typedef typename equal<X,typename ptr<X>::T >::T T; };
52 
53  template<bool test, class A, class B>
54  struct If
55  {
56  typedef A result_t;
57  };
58 
59  template<class A,class B>
60  struct If<false,A,B>
61  {
62  typedef B result_t;
63  };
64 
65  template<class A,class B>
66  struct Eq
67  {
68  enum { result = 0 };
69  typedef false_t result_t;
70  };
71 
72  template<class A>
73  struct Eq<A,A>
74  {
75  enum { result = 1 };
76  typedef true_t result_t;
77  };
78 
79  template<class A>
80  struct ValueType
81  {
82  typedef typename A::value_type result_t;
83  };
84 
85  template<class A, int n >
86  struct ValueType< A[n] >
87  {
88  typedef A result_t;
89  };
90  template<class A>
91  struct ValueType<A*>
92  {
93  typedef A result_t;
94  };
95 
96  template<int n>
97  struct Int {};
98 
99  template<bool b> struct BoolType { typedef false_t result_t; };
100  template<> struct BoolType<true> { typedef true_t result_t; };
101 
102  template<class X>
103  struct deconst{
104  typedef X result_t;
105  };
106 
107  template<class X>
108  struct deconst< const X> { typedef X result_t; };
109 
110  template<class A,class B>
111  struct Sup
112  {
113  typedef typename deconst<A>::result_t result_t;
114  };
115 
116  template<class el, class nx>
117  struct Pair
118  {
119  typedef el element_t;
120  typedef nx next_t;
121  };
122 
123 }// namespace texp
124 
125 #define typelist1(a) Type::Pair< a, Type::null_t >
126 #define typelist2(a,b) Type::Pair< a, typelist1(b) >
127 #define typelist3(a,b,c) Type::Pair< a, typelist2(b,c) >
128 #define typelist4(a,b,c) Type::Pair< a, typelist3(b,c,d) >
129 
130 
131 
132 
133 
134 
135 
136 }// end namespace mmx
137 
138 #endif
equal< X, typename ptr< X >::T >::T T
Definition: texp_tests.hpp:51
true_t result_t
Definition: texp_tests.hpp:100
B result_t
Definition: texp_tests.hpp:62
TMPL X
Definition: polynomial_operators.hpp:148
structure defining a the empty list
Definition: texp_bool.hpp:11
A result_t
Definition: texp_tests.hpp:93
Definition: texp_tests.hpp:54
select a type base on condition V, V is assumed to be in { 0, 1 }
Definition: texp_tests.hpp:36
X result_t
Definition: texp_tests.hpp:108
Definition: texp_tests.hpp:15
el element_t
Definition: texp_tests.hpp:119
Definition: texp_tests.hpp:117
nx next_t
Definition: texp_tests.hpp:120
A T
Definition: texp_tests.hpp:36
Definition: texp_tests.hpp:80
true_t T
Definition: texp_tests.hpp:23
Definition: texp_tests.hpp:111
deconst< A >::result_t result_t
Definition: texp_tests.hpp:113
structure defining a positive answer
Definition: texp_bool.hpp:7
X result_t
Definition: texp_tests.hpp:104
Definition: texp_tests.hpp:51
ask for type equality return T in { false_t, true_t } and V in {0,1}
Definition: texp_tests.hpp:13
false_t T
Definition: texp_tests.hpp:16
Definition: texp_tests.hpp:41
A result_t
Definition: texp_tests.hpp:56
true_t T
Definition: texp_tests.hpp:49
A T
Definition: texp_tests.hpp:28
select a type based on condition X, X is assumed to be in { null_t, false_t, true_t } ...
Definition: texp_tests.hpp:28
Definition: texp_tests.hpp:97
false_t result_t
Definition: texp_tests.hpp:69
B T
Definition: texp_tests.hpp:38
true_t result_t
Definition: texp_tests.hpp:76
B T
Definition: texp_tests.hpp:32
structure defining a negative answer
Definition: texp_bool.hpp:9
true_t T
Definition: texp_tests.hpp:47
Definition: texp_tests.hpp:68
A::value_type result_t
Definition: texp_tests.hpp:82
B T
Definition: texp_tests.hpp:30
Definition: texp_tests.hpp:99
Definition: texp_tests.hpp:103
Definition: array.hpp:12
Definition: texp_tests.hpp:66
A result_t
Definition: texp_tests.hpp:88
false_t result_t
Definition: texp_tests.hpp:99
false_t T
Definition: texp_tests.hpp:43
Home