identitygridhierarchiciterator.hh
Go to the documentation of this file.00001 #ifndef DUNE_IDENTITYGRIDHIERITERATOR_HH
00002 #define DUNE_IDENTITYGRIDHIERITERATOR_HH
00003
00004 #include "identitygridentitypointer.hh"
00009 namespace Dune {
00010
00011
00012
00013
00021 template<class GridImp>
00022 class IdentityGridHierarchicIterator :
00023 public Dune::IdentityGridEntityPointer <0,GridImp>
00024 {
00025 public:
00026
00027 typedef typename GridImp::template Codim<0>::Entity Entity;
00028
00029 typedef IdentityGridEntity <0, GridImp::dimension, GridImp> IdentityGridElement;
00030
00031
00033 explicit IdentityGridHierarchicIterator(const GridImp* identityGrid, const IdentityGridElement& startEntity, int maxLevel) :
00034 IdentityGridEntityPointer<0,GridImp>(identityGrid, startEntity.hostEntity_->hbegin(maxLevel)),
00035 identityGrid_(identityGrid),
00036 hostGridHierarchicIterator_(startEntity.hostEntity_->hbegin(maxLevel)),
00037 hostGridHierarchicEndIterator_(startEntity.hostEntity_->hend(maxLevel))
00038 {
00039 this->virtualEntity_.setToTarget(hostGridHierarchicIterator_);
00040 }
00041
00042
00044 explicit IdentityGridHierarchicIterator(const GridImp* identityGrid, const IdentityGridElement& startEntity, int maxLevel, bool endDummy) :
00045 IdentityGridEntityPointer<0,GridImp>(identityGrid, startEntity.hostEntity_->hend(maxLevel)),
00046 identityGrid_(identityGrid),
00047 hostGridHierarchicIterator_(startEntity.hostEntity_->hbegin(maxLevel)),
00048 hostGridHierarchicEndIterator_(startEntity.hostEntity_->hend(maxLevel))
00049 {}
00050
00051
00053 void increment()
00054 {
00055 ++hostGridHierarchicIterator_;
00056 this->virtualEntity_.setToTarget(hostGridHierarchicIterator_);
00057 }
00058
00059
00060 private:
00061
00062
00063 typedef typename GridImp::HostGridType::template Codim<0>::Entity::HierarchicIterator HostGridHierarchicIterator;
00064
00065 enum {dim = GridImp::HostGridType::dimension};
00066
00067
00068
00070 unsigned int hostLevelIndex() const {
00071 return identityGrid_->hostgrid_->levelIndexSet(hostGridHierarchicIterator_.level()).index(*hostGridHierarchicIterator_);
00072 }
00073
00074
00075 const GridImp* identityGrid_;
00076
00077 HostGridHierarchicIterator hostGridHierarchicIterator_;
00078
00079 HostGridHierarchicIterator hostGridHierarchicEndIterator_;
00080 };
00081
00082
00083 }
00084
00085 #endif