Developer documentation

texp_issubsetof.hpp
Go to the documentation of this file.
1 #ifndef realroot_ARITHM_TRAITS_ISSUBSETOF_H
2 #define realroot_ARITHM_TRAITS_ISSUBSETOF_H
3 
5 
6 namespace mmx {
7 
8 namespace texp {
9  template<typename X, typename Y>
10  struct issubsetof_ { typedef texp::false_t T; };
11 
13  template<class K, class X, class Y>
14  struct kernel_issubsetof { typedef false_t T; };
15  template<class X, class Y>
16  struct kernel_issubsetof<null_t,X,Y> { typedef null_t T; };
17 
18  template<class K>
19  struct kernel_issubsetof< K, typename K::integer, algebraic<K> > { typedef true_t T; };
20  template<class K>
21  struct kernel_issubsetof< K, typename K::integer, typename K::rational > { typedef true_t T; };
23  template<class K>
24  struct kernel_issubsetof< K, typename K::integer, typename K::floating > { typedef true_t T; };
25  template<class K>
26  struct kernel_issubsetof< K, double, typename K::floating > { typedef true_t T; };
27  template<class K>
28  struct kernel_issubsetof< K, typename K::integer, double > { typedef true_t T; };
29  template<class K>
30  struct kernel_issubsetof< K, typename K::floating, typename K::rational > { typedef true_t T; };
31  template<typename Y>
32  struct issubsetof_<int,Y>
33  {
34  typedef texp::true_t T;
35  };
36 
37  template< template<class> class R, class X, class Y>
38  struct issubsetof_< R<X>, R<Y> >
39  { typedef typename issubsetof_<X,Y>::T T; };
40 
41 
46  template<typename X, typename Y>
47  struct issubsetof
48  {
49  typedef typename ucstref < X>::T UX; typedef typename ucstref < Y>::T UY;
50  typedef typename kernelof<UX>::T KX; typedef typename kernelof<UY>::T KY;
51  typedef typename
52  sfirstnn<
53  typename equal<UX,UY>::T,
54  typename issubsetof_<UX,UY>::T,
57  };
58 
59  template<typename X, typename TypeOrListOfTypes > struct issupersetof;
60  template<typename X, typename Type>
61  struct issupersetof {
62  typedef typename issubsetof<Type,X>::T T;
63  };
64 
65  template<typename X, typename A>
66  struct issupersetof< X, texp::tlist<A,texp::null_t> >
67  {
68  typedef typename issupersetof<X,A>::T T;
69  };
70 
71  template<typename X, typename A, typename Tail>
72  struct issupersetof< X, texp::tlist<A,Tail> >
73  {
74  typedef typename issubsetof<A,X>::T ok;
76  };
77 
78 }
79 }// end namespace mmx
80 #endif
X can be seen as an arithmetic subset of Y (eg. "Z in Q") return texp::true_t if all x in X are in Y...
Definition: texp_issubsetof.hpp:47
kernelof< UX >::T KX
Definition: texp_issubsetof.hpp:50
false_t T
Definition: texp_issubsetof.hpp:14
issubsetof< A, X >::T ok
Definition: texp_issubsetof.hpp:74
TMPL X
Definition: polynomial_operators.hpp:148
structure defining a the empty list
Definition: texp_bool.hpp:11
texp::false_t T
Definition: texp_issubsetof.hpp:10
type list node
Definition: texp_list.hpp:14
ucstref< X >::T UX
Definition: texp_issubsetof.hpp:49
structure defining a positive answer
Definition: texp_bool.hpp:7
issubsetof< Type, X >::T T
Definition: texp_issubsetof.hpp:62
sfirstnn< typename equal< UX, UY >::T, typename issubsetof_< UX, UY >::T, typename kernel_issubsetof< typename kernelof< UX >::T, UX, UY >::T, typename kernel_issubsetof< typename kernelof< UY >::T, UX, UY >::T >::T T
Definition: texp_issubsetof.hpp:56
kernelof< UY >::T KY
Definition: texp_issubsetof.hpp:50
texp::true_t T
Definition: texp_issubsetof.hpp:34
uref< typename ucst< X >::T >::T T
Definition: texp_strip_qualifiers.hpp:28
Definition: texp_kernelof.hpp:7
select a type based on condition X, X is assumed to be in { null_t, false_t, true_t } ...
Definition: texp_tests.hpp:28
issupersetof< X, A >::T T
Definition: texp_issubsetof.hpp:68
issubsetof_< X, Y >::T T
Definition: texp_issubsetof.hpp:39
Definition: texp_list.hpp:82
structure defining a negative answer
Definition: texp_bool.hpp:9
Definition: texp_issubsetof.hpp:59
Definition: array.hpp:12
tselect< ok, typename issupersetof< X, Tail >::T, texp::false_t >::T T
Definition: texp_issubsetof.hpp:75
kernel version of issubsetof
Definition: texp_issubsetof.hpp:14
ucstref< Y >::T UY
Definition: texp_issubsetof.hpp:49
Definition: texp_issubsetof.hpp:10
null_t T
Definition: texp_issubsetof.hpp:16
Home