realroot_doc 0.1.1
/Users/mourrain/Devel/mmx/realroot/include/realroot/texp_container_traits.hpp
Go to the documentation of this file.
00001 #ifndef realroot_CONTAINER_TRAITS_H
00002 #define realroot_CONTAINER_TRAITS_H
00003 
00004 namespace mmx {
00005 
00006 namespace texp
00007 {
00008   template < class R, class X >
00009   struct instanceof { typedef null_t T; };  
00010   template < template<class> class R, class X, class Y>
00011   struct instanceof< R<X>, Y > { typedef R<Y> T; };
00012   template< template<class,int> class R, int N, class X, class Y>
00013   struct instanceof< R<X,N>, Y> { typedef R<Y,N> T; };
00014   template< template<class,unsigned> class R, unsigned N, class X, class Y>
00015   
00016   struct instanceof< R<X,N>, Y> { typedef R<Y,N> T; };
00017   // synaps view
00018   template< template<class,class> class V, class C, class R, class Y>
00019   struct instanceof< V<C,R>, Y > { typedef V<Y, typename instanceof<R,Y>::T > T; };
00020   
00021   template < class A, class B >
00022   struct sup_container { typedef A T; };
00023 
00024   template < class Container >
00025   struct value_type_{ typedef typename Container::value_type T; };
00026   template< template<class X> class R, class X >
00027   struct value_type_< R<X> >  { typedef X T; };
00028   template< typename C, unsigned N > struct value_type_< C[N] > { typedef C T;  };
00029   template< typename  C >  struct value_type_<C*> { typedef C T; };
00030   template< typename  C >  struct value_type_<const C*> { typedef C T; };
00031   template < class Container >
00032   struct value_type { typedef typename value_type_< typename ucstref<Container>::T >::T T; };
00033 };
00034 
00035 }// end namespace mmx
00036 
00037 #endif