00001
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
00067 IsTrue<SameType<TypeTag,LevelTag>::value||SameType<TypeTag,LevelTag>::value>::yes();
00068 return iter.ileafbegin();
00069 }
00074 template<typename T>
00075 inline static IntersectionIterator end(T& iter)
00076 {
00077
00078 IsTrue<SameType<TypeTag,LevelTag>::value||SameType<TypeTag,LevelTag>::value>::yes();
00079 return iter.ileafend();
00080 }
00081 };
00082
00083
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
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 }
00126 #endif