realroot_doc 0.1.1
/Users/mourrain/Devel/mmx/realroot/include/realroot/texp_isfield.hpp
Go to the documentation of this file.
00001 #ifndef realroot_ARITHM_TRAITS_ISFIELD_H
00002 #define realroot_ARITHM_TRAITS_ISFIELD_H
00003 
00004 #include <realroot/texp_kernelof.hpp>
00005 
00006 //======================================================================
00007 namespace mmx {
00008 //======================================================================
00009 
00010 namespace texp {
00011 
00012   template<typename X>
00013   struct isfield_ { typedef false_t T; };
00014   
00015   template<> struct isfield_<float>       { typedef true_t T; };
00016   template<> struct isfield_<double>      { typedef true_t T; };
00017   template<> struct isfield_<long double> { typedef true_t T; };
00018 
00019   template<typename K, typename X>
00020   struct kernel_isfield { typedef true_t T; };
00021   template<typename K>
00022   struct kernel_isfield< K, typename K::integer > { typedef false_t T; };
00023   template<typename X>
00024   struct kernel_isfield<null_t,X> { typedef typename isfield_<X>::T T; };
00025   
00026   template<typename X>
00027   struct isfield
00028   {
00029     typedef  typename ucstref<X>::T   _X;
00030     typedef  typename kernel_isfield< typename kernelof<_X>::T, _X >::T T;
00031   };
00032 
00033 };
00034 
00035 //======================================================================
00036 } //  namespace mmx 
00037 //======================================================================
00038 
00039 #endif