1#ifndef DUNE_MULTIDOMAINGRID_SUBDOMAINGRID_HIERARCHICITERATOR_HH
2#define DUNE_MULTIDOMAINGRID_SUBDOMAINGRID_HIERARCHICITERATOR_HH
12template<
int,
int,
typename>
15template<
typename Gr
idImp>
16class HierarchicIteratorWrapper
19 template<
int cd,
class Gr
id,
class IteratorImp >
20 friend class Dune::EntityIterator;
22 template<
int,
int,
typename>
23 friend class EntityWrapper;
25 template<
int,
int,
typename>
26 friend class EntityWrapper;
28 using MultiDomainIterator =
typename GridImp::MultiDomainGrid::template Codim<0>::Entity::HierarchicIterator;
32 static const int codimension = 0;
34 using EntityWrapper = Dune::mdgrid::subdomain::EntityWrapper<0,GridImp::dimension,GridImp>;
35 using Entity =
typename GridImp::template Codim<0>::Entity;
37 HierarchicIteratorWrapper()
41 HierarchicIteratorWrapper(
43 const MultiDomainIterator& multiDomainIterator,
44 const MultiDomainIterator& multiDomainEnd
47 , _multiDomainIterator(multiDomainIterator)
48 , _multiDomainEnd(multiDomainEnd)
50 incrementToNextValidPosition();
53 bool equals(
const HierarchicIteratorWrapper& r)
const
55 return _grid == r._grid && _multiDomainIterator == r._multiDomainIterator;
58 Entity dereference()
const
60 return {EntityWrapper(_grid,*_multiDomainIterator)};
63 void incrementToNextValidPosition() {
64 while(_multiDomainIterator != _multiDomainEnd && !_grid->containsMultiDomainEntity(*_multiDomainIterator))
66 ++_multiDomainIterator;
71 ++_multiDomainIterator;
72 incrementToNextValidPosition();
78 MultiDomainIterator _multiDomainIterator;
79 MultiDomainIterator _multiDomainEnd;