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 
00005 #include <dune/common/static_assert.hh>
00006 #include <dune/common/typetraits.hh>
00007 #include <dune/common/deprecated.hh>
00008 
00019 namespace Dune
00020 {
00028   struct LevelTag{} DUNE_DEPRECATED;
00029   
00033   struct LeafTag{} DUNE_DEPRECATED;
00034   
00048   template<typename Grid, typename Tag>
00049   struct IntersectionIteratorGetter
00050   {
00058     typedef Tag TypeTag;
00059     
00063     typedef typename Grid::template Codim<0>::IntersectionIterator IntersectionIterator;
00064     
00069     template<typename T>
00070     inline static IntersectionIterator begin(T& iter)
00071     {
00072       // Trigger a compile error
00073       IsTrue<is_same<TypeTag,LevelTag>::value||is_same<TypeTag,LevelTag>::value>::yes();
00074       return iter.ileafbegin();
00075     }
00080     template<typename T>
00081     inline static IntersectionIterator end(T& iter)
00082     {
00083       // Trigger a compile error
00084       IsTrue<is_same<TypeTag,LevelTag>::value||is_same<TypeTag,LevelTag>::value>::yes();
00085       return iter.ileafend();
00086     }
00087   };
00088       
00089   // Specialization for the leaf
00090   template<typename Grid>
00091   struct IntersectionIteratorGetter<Grid,LeafTag>
00092   {
00093     typedef typename Grid::template Codim<0>::LeafIntersectionIterator IntersectionIterator;
00094     
00095     template<typename T>
00096     inline static IntersectionIterator begin(T& iter)
00097     {
00098       return iter.ileafbegin();
00099     }
00100     
00101     template<typename T>
00102     inline static IntersectionIterator end(T& iter)
00103     {
00104       return iter.ileafend();
00105     }
00106   };
00107       
00108   // Specialization of the level
00109   template<typename Grid>
00110   struct IntersectionIteratorGetter<Grid,LevelTag>
00111   {
00112     typedef typename Grid::template Codim<0>::LevelIntersectionIterator IntersectionIterator;
00113     
00114     template<typename T>
00115     inline static IntersectionIterator begin(T& iter)
00116     {
00117       return iter.ilevelbegin();
00118     }
00119     
00120     template<typename T>
00121     inline static IntersectionIterator end(T& iter)
00122     {
00123       return iter.ilevelend();
00124     }           
00125   };
00126 
00131 }// end namespace Dune
00132 #endif

Generated on Sun Nov 15 22:28:42 2009 for dune-grid by  doxygen 1.5.6