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     // The type used to store coordinates
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         // Delete intersection geometry objects, if present
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     //  private data
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         // The type used to store coordinates
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             // Delete intersection geometry objects, if present
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 }  // namespace Dune
00159 
00160 #endif

Generated on Fri Apr 29 2011 with Doxygen (ver 1.7.1) [doxygen-log,error-log].