intersectiongetter.hh

Go to the documentation of this file.
00001 // $Id: p1groundwater.hh 336 2006-05-03 13:09:05Z oliver $
00002 #ifndef DUNE_INTERSECTIONGETTER_HH
00003 #define DUNE_INTERSECTIONGETTER_HH
00004 
00013 namespace Dune
00014 {
00022   struct LevelTag{};
00023   
00027   struct LeafTag{};
00028   
00042   template<typename Grid, typename Tag>
00043   struct IntersectionIteratorGetter
00044   {
00052     typedef Tag TypeTag;
00053     
00057     typedef typename Grid::template Codim<0>::IntersectionIterator IntersectionIterator;
00058     
00063     template<typename T>
00064     inline static IntersectionIterator begin(T& iter)
00065     {
00066       // Trigger a compile error
00067       IsTrue<is_same<TypeTag,LevelTag>::value||is_same<TypeTag,LevelTag>::value>::yes();
00068       return iter.ileafbegin();
00069     }
00074     template<typename T>
00075     inline static IntersectionIterator end(T& iter)
00076     {
00077       // Trigger a compile error
00078       IsTrue<is_same<TypeTag,LevelTag>::value||is_same<TypeTag,LevelTag>::value>::yes();
00079       return iter.ileafend();
00080     }
00081   };
00082       
00083   // Specialization for the leaf
00084   template<typename Grid>
00085   struct IntersectionIteratorGetter<Grid,LeafTag>
00086   {
00087     typedef typename Grid::template Codim<0>::LeafIntersectionIterator IntersectionIterator;
00088     
00089     template<typename T>
00090     inline static IntersectionIterator begin(T& iter)
00091     {
00092       return iter.ileafbegin();
00093     }
00094     
00095     template<typename T>
00096     inline static IntersectionIterator end(T& iter)
00097     {
00098       return iter.ileafend();
00099     }
00100   };
00101       
00102   // Specialization of the level
00103   template<typename Grid>
00104   struct IntersectionIteratorGetter<Grid,LevelTag>
00105   {
00106     typedef typename Grid::template Codim<0>::LevelIntersectionIterator IntersectionIterator;
00107     
00108     template<typename T>
00109     inline static IntersectionIterator begin(T& iter)
00110     {
00111       return iter.ilevelbegin();
00112     }
00113     
00114     template<typename T>
00115     inline static IntersectionIterator end(T& iter)
00116     {
00117       return iter.ilevelend();
00118     }           
00119   };
00120 
00125 }// end namespace Dune
00126 #endif

Generated on 9 Apr 2008 with Doxygen (ver 1.5.2) [logfile].