1#ifndef DUNE_SPGRID_HITERATOR_HH
2#define DUNE_SPGRID_HITERATOR_HH
6#include <dune/grid/common/entityiterator.hh>
8#include <dune/grid/spgrid/entity.hh>
16 template<
class Gr
id,
int codim >
17 class SPHierarchicIterator
19 typedef SPHierarchicIterator< Grid, codim > This;
22 typedef typename std::remove_const< Grid >::type::Traits Traits;
24 static const int dimension = Traits::ReferenceCube::dimension;
25 static const int codimension = 0;
26 static const int mydimension = dimension - codimension;
28 typedef typename Traits::template Codim< codimension >::Entity Entity;
31 typedef SPEntity< codimension, dimension, Grid > EntityImpl;
34 typedef typename EntityImpl::EntityInfo EntityInfo;
35 typedef typename EntityImpl::GridLevel GridLevel;
37 SPHierarchicIterator () =
default;
39 SPHierarchicIterator (
const EntityInfo &entityInfo,
int maxLevel )
40 : entityInfo_( entityInfo ),
41 minLevel_( entityInfo.gridLevel().level() ),
42 maxLevel_(
std::
min( maxLevel, entityInfo.gridLevel().grid().maxLevel() ) )
47 Entity dereference ()
const {
return EntityImpl( entityInfo() ); }
49 bool equals (
const This &other )
const {
return entityInfo().equals( other.entityInfo() ); }
53 if( gridLevel().level() >= maxLevel_ )
55 while( (gridLevel().level() > minLevel_) && !entityInfo().nextChild() )
60 entityInfo().update();
63 const EntityInfo &entityInfo ()
const {
return entityInfo_; }
64 EntityInfo &entityInfo () {
return entityInfo_; }
66 const GridLevel &gridLevel ()
const {
return entityInfo().gridLevel(); }
69 EntityInfo entityInfo_;
70 int minLevel_, maxLevel_;
constexpr auto equals(T1 &&t1, T2 &&t2)
Equality comparison.
Definition: hybridutilities.hh:402
auto min(ADLTag< 0 >, const V &v1, const V &v2)
implements binary Simd::min()
Definition: defaults.hh:89
Dune namespace.
Definition: alignedallocator.hh:13