dune-spgrid  2.7
hierarchiciterator.hh
Go to the documentation of this file.
1 #ifndef DUNE_SPGRID_HITERATOR_HH
2 #define DUNE_SPGRID_HITERATOR_HH
3 
4 #include <type_traits>
5 
6 #include <dune/grid/common/entityiterator.hh>
7 
9 
10 namespace Dune
11 {
12 
13  // SPHierarchicIterator
14  // --------------------
15 
16  template< class Grid, int codim >
18  {
20 
21  public:
22  typedef typename std::remove_const< Grid >::type::Traits Traits;
23 
24  static const int dimension = Traits::ReferenceCube::dimension;
25  static const int codimension = 0;
26  static const int mydimension = dimension - codimension;
27 
28  typedef typename Traits::template Codim< codimension >::Entity Entity;
29 
30  private:
32 
33  public:
35  typedef typename EntityImpl::GridLevel GridLevel;
36 
37  SPHierarchicIterator () = default;
38 
39  SPHierarchicIterator ( const EntityInfo &entityInfo, int maxLevel )
40  : entityInfo_( entityInfo ),
41  minLevel_( entityInfo.gridLevel().level() ),
42  maxLevel_( std::min( maxLevel, entityInfo.gridLevel().grid().maxLevel() ) )
43  {
44  increment();
45  }
46 
47  Entity dereference () const { return EntityImpl( entityInfo() ); }
48 
49  bool equals ( const This &other ) const { return entityInfo().equals( other.entityInfo() ); }
50 
51  void increment ()
52  {
53  if( gridLevel().level() >= maxLevel_ )
54  {
55  while( (gridLevel().level() > minLevel_) && !entityInfo().nextChild() )
56  entityInfo().up();
57  }
58  else
59  entityInfo().down();
60  entityInfo().update();
61  }
62 
63  const EntityInfo &entityInfo () const { return entityInfo_; }
64  EntityInfo &entityInfo () { return entityInfo_; }
65 
66  const GridLevel &gridLevel () const { return entityInfo().gridLevel(); }
67 
68  private:
69  EntityInfo entityInfo_;
70  int minLevel_, maxLevel_;
71  };
72 
73 } // namespace Dune
74 
75 #endif // #ifndef DUNE_SPGRID_HITERATOR_HH
Definition: iostream.hh:7
Definition: entity.hh:146
Definition: hierarchiciterator.hh:18
EntityImpl::GridLevel GridLevel
Definition: hierarchiciterator.hh:35
const EntityInfo & entityInfo() const
Definition: hierarchiciterator.hh:63
bool equals(const This &other) const
Definition: hierarchiciterator.hh:49
void increment()
Definition: hierarchiciterator.hh:51
SPHierarchicIterator(const EntityInfo &entityInfo, int maxLevel)
Definition: hierarchiciterator.hh:39
Entity dereference() const
Definition: hierarchiciterator.hh:47
static const int dimension
Definition: hierarchiciterator.hh:24
Traits::template Codim< codimension >::Entity Entity
Definition: hierarchiciterator.hh:28
static const int codimension
Definition: hierarchiciterator.hh:25
EntityImpl::EntityInfo EntityInfo
Definition: hierarchiciterator.hh:34
static const int mydimension
Definition: hierarchiciterator.hh:26
EntityInfo & entityInfo()
Definition: hierarchiciterator.hh:64
const GridLevel & gridLevel() const
Definition: hierarchiciterator.hh:66
std::remove_const< Grid >::type::Traits Traits
Definition: hierarchiciterator.hh:22
Definition: entityinfo.hh:24
const GridLevel & gridLevel() const
Definition: entityinfo.hh:66
void up()
Definition: entityinfo.hh:99
void update()
Definition: entityinfo.hh:122
bool equals(const This &other) const
Definition: entityinfo.hh:77
void down()
Definition: entityinfo.hh:107
Definition: gridlevel.hh:35