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;