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;