1#ifndef DUNE_GRID_MULTIDOMAINGRID_SUBDOMAINGRID_ITERATOR_HH
2#define DUNE_GRID_MULTIDOMAINGRID_SUBDOMAINGRID_ITERATOR_HH
4#include <dune/grid/common/gridenums.hh>
14template<
typename MDGr
id>
17template<
int,
int,
typename>
22 typename MultiDomainIterator,
24 PartitionIteratorType pitype,
30 template<
typename MDGr
id>
31 friend class SubDomainGrid;
33 template<
int cd,
class Gr
id,
class IteratorImp >
34 friend class Dune::EntityIterator;
36 static const int codimension = codim;
38 using IndexSet =
typename GridView::IndexSet;
43 using Entity =
typename GridImp::template Codim<codim>::Entity;
47 using EntityWrapper = Dune::mdgrid::subdomain::EntityWrapper<codim,GridImp::dimension,GridImp>;
56 const IndexSet* indexSet,
57 MultiDomainIterator multiDomainIterator,
58 MultiDomainIterator endIterator
62 , _multiDomainIterator(multiDomainIterator)
65 incrementToNextValidPosition();
68 void incrementToNextValidPosition() {
69 while(_multiDomainIterator != _end && !_indexSet->containsMultiDomainEntity(*_multiDomainIterator))
71 ++_multiDomainIterator;
76 ++_multiDomainIterator;
77 incrementToNextValidPosition();
80 bool equals(
const IteratorWrapper& r)
const
82 return _grid == r._grid && _indexSet == r._indexSet && _multiDomainIterator == r._multiDomainIterator;
85 Entity dereference()
const
87 return {EntityWrapper(_grid,*_multiDomainIterator)};
92 return _multiDomainIterator.level();
100 const IndexSet* _indexSet;
101 MultiDomainIterator _multiDomainIterator;
102 MultiDomainIterator _end;