00001 // -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- 00002 // vi: set et ts=4 sw=2 sts=2: 00003 #ifndef DUNE_FTRAITS_HH 00004 #define DUNE_FTRAITS_HH 00005 00010 #include <complex> 00011 #include <vector> 00012 00013 namespace Dune { 00014 00022 template<class T> 00023 struct FieldTraits 00024 { 00026 typedef T field_type; 00028 typedef T real_type; 00029 }; 00030 00031 template<class T> 00032 struct FieldTraits<const T> 00033 { 00034 typedef typename FieldTraits<T>::field_type field_type; 00035 typedef typename FieldTraits<T>::real_type real_type; 00036 }; 00037 00038 template<class T> 00039 struct FieldTraits< std::complex<T> > 00040 { 00041 typedef std::complex<T> field_type; 00042 typedef T real_type; 00043 }; 00044 00045 template<class T, unsigned int N> 00046 struct FieldTraits< T[N] > 00047 { 00048 typedef typename FieldTraits<T>::field_type field_type; 00049 typedef typename FieldTraits<T>::real_type real_type; 00050 }; 00051 00052 template<class T> 00053 struct FieldTraits< std::vector<T> > 00054 { 00055 typedef typename FieldTraits<T>::field_type field_type; 00056 typedef typename FieldTraits<T>::real_type real_type; 00057 }; 00058 00059 } // end namespace Dune 00060 00061 #endif // DUNE_FTRAITS_HH