identitygridintersectioniterator.hh
Go to the documentation of this file.00001 #ifndef DUNE_IDENTITYGRID_INTERSECTIONITERATOR_HH
00002 #define DUNE_IDENTITYGRID_INTERSECTIONITERATOR_HH
00003
00004 #include "identitygridintersections.hh"
00005 #include "identitygridentity.hh"
00006
00007 #include <dune/grid/common/intersection.hh>
00008
00013 namespace Dune {
00014
00023 template<class GridImp>
00024 class IdentityGridLeafIntersectionIterator
00025 {
00026
00027 enum {dim=GridImp::dimension};
00028
00029 enum {dimworld=GridImp::dimensionworld};
00030
00031
00032 typedef typename GridImp::ctype ctype;
00033
00034 typedef typename GridImp::HostGridType::template Codim<0>::Entity::LeafIntersectionIterator HostLeafIntersectionIterator;
00035
00036 public:
00037
00038 typedef Dune::Intersection<const GridImp, Dune::IdentityGridLeafIntersection> Intersection;
00039
00040 IdentityGridLeafIntersectionIterator(const GridImp* identityGrid,
00041 const HostLeafIntersectionIterator& hostIterator)
00042 : intersection_(IdentityGridLeafIntersection<GridImp>(identityGrid, hostIterator))
00043 {}
00044
00046 ~IdentityGridLeafIntersectionIterator() {};
00047
00049 bool equals(const IdentityGridLeafIntersectionIterator<GridImp>& other) const {
00050 return GridImp::getRealImplementation(intersection_).hostIterator_
00051 == GridImp::getRealImplementation(other.intersection_).hostIterator_;
00052 }
00053
00054
00056 void increment() {
00057 ++GridImp::getRealImplementation(intersection_).hostIterator_;
00058
00059
00060 if (GridImp::getRealImplementation(intersection_).intersectionGlobal_ != NULL) {
00061 delete GridImp::getRealImplementation(intersection_).intersectionGlobal_;
00062 GridImp::getRealImplementation(intersection_).intersectionGlobal_ = NULL;
00063 }
00064
00065 if (GridImp::getRealImplementation(intersection_).selfLocal_ != NULL) {
00066 delete GridImp::getRealImplementation(intersection_).selfLocal_;
00067 GridImp::getRealImplementation(intersection_).selfLocal_ = NULL;
00068 }
00069
00070 if (GridImp::getRealImplementation(intersection_).neighborLocal_ != NULL) {
00071 delete GridImp::getRealImplementation(intersection_).neighborLocal_;
00072 GridImp::getRealImplementation(intersection_).neighborLocal_ = NULL;
00073 }
00074 }
00075
00077 const Intersection & dereference() const {
00078 return intersection_;
00079 }
00080
00081 private:
00082
00083
00084
00085
00088 mutable MakeableInterfaceObject<Intersection> intersection_;
00089 };
00090
00091
00092
00093
00095 template<class GridImp>
00096 class IdentityGridLevelIntersectionIterator
00097 {
00098 enum {dim=GridImp::dimension};
00099
00100 enum {dimworld=GridImp::dimensionworld};
00101
00102
00103 typedef typename GridImp::ctype ctype;
00104
00105 typedef typename GridImp::HostGridType::template Codim<0>::Entity::LevelIntersectionIterator HostLevelIntersectionIterator;
00106
00107 public:
00108
00109 typedef Dune::Intersection<const GridImp, Dune::IdentityGridLevelIntersection> Intersection;
00110
00111 IdentityGridLevelIntersectionIterator(const GridImp* identityGrid,
00112 const HostLevelIntersectionIterator& hostIterator)
00113 : intersection_(IdentityGridLevelIntersection<GridImp>(identityGrid,hostIterator))
00114 {}
00115
00117 bool equals(const IdentityGridLevelIntersectionIterator<GridImp>& other) const {
00118 return GridImp::getRealImplementation(intersection_).hostIterator_ == GridImp::getRealImplementation(other.intersection_).hostIterator_;
00119 }
00120
00121
00123 void increment() {
00124 ++GridImp::getRealImplementation(intersection_).hostIterator_;
00125
00126
00127 if (GridImp::getRealImplementation(intersection_).intersectionGlobal_ != NULL) {
00128 delete GridImp::getRealImplementation(intersection_).intersectionGlobal_;
00129 GridImp::getRealImplementation(intersection_).intersectionGlobal_ = NULL;
00130 }
00131
00132 if (GridImp::getRealImplementation(intersection_).selfLocal_ != NULL) {
00133 delete GridImp::getRealImplementation(intersection_).selfLocal_;
00134 GridImp::getRealImplementation(intersection_).selfLocal_ = NULL;
00135 }
00136
00137 if (GridImp::getRealImplementation(intersection_).neighborLocal_ != NULL) {
00138 delete GridImp::getRealImplementation(intersection_).neighborLocal_;
00139 GridImp::getRealImplementation(intersection_).neighborLocal_ = NULL;
00140 }
00141
00142 }
00143
00145 const Intersection & dereference() const {
00146 return intersection_;
00147 }
00148
00149 private:
00150
00153 mutable MakeableInterfaceObject<Intersection> intersection_;
00154
00155 };
00156
00157
00158 }
00159
00160 #endif