dune-multidomaingrid 2.8
Loading...
Searching...
No Matches
subdomaingrid/iterator.hh
Go to the documentation of this file.
1#ifndef DUNE_GRID_MULTIDOMAINGRID_SUBDOMAINGRID_ITERATOR_HH
2#define DUNE_GRID_MULTIDOMAINGRID_SUBDOMAINGRID_ITERATOR_HH
3
4#include <dune/grid/common/gridenums.hh>
5
6#include "entity.hh"
7
8namespace Dune {
9
10namespace mdgrid {
11
12namespace subdomain {
13
14template<typename MDGrid>
15class SubDomainGrid;
16
17template<int,int,typename>
18class EntityWrapper;
19
20template<
21 typename GridView,
22 typename MultiDomainIterator,
23 int codim,
24 PartitionIteratorType pitype,
25 typename GridImp
26 >
28{
29
30 template<typename MDGrid>
31 friend class SubDomainGrid;
32
33 template< int cd, class Grid, class IteratorImp >
34 friend class Dune::EntityIterator;
35
36 static const int codimension = codim;
37
38 using IndexSet = typename GridView::IndexSet;
39
40public:
41
42 // Entity has to be public for iterator traits
43 using Entity = typename GridImp::template Codim<codim>::Entity;
44
45private:
46
48
50 : _grid(nullptr)
51 , _indexSet(nullptr)
52 {}
53
55 const GridImp* grid,
56 const IndexSet* indexSet,
57 MultiDomainIterator multiDomainIterator,
58 MultiDomainIterator endIterator
59 )
60 : _grid(grid)
61 , _indexSet(indexSet)
62 , _multiDomainIterator(multiDomainIterator)
63 , _end(endIterator)
64 {
65 incrementToNextValidPosition();
66 }
67
68 void incrementToNextValidPosition() {
69 while(_multiDomainIterator != _end && !_indexSet->containsMultiDomainEntity(*_multiDomainIterator))
70 {
71 ++_multiDomainIterator;
72 }
73 }
74
75 void increment() {
76 ++_multiDomainIterator;
77 incrementToNextValidPosition();
78 }
79
80 bool equals(const IteratorWrapper& r) const
81 {
82 return _grid == r._grid && _indexSet == r._indexSet && _multiDomainIterator == r._multiDomainIterator;
83 }
84
85 Entity dereference() const
86 {
87 return {EntityWrapper(_grid,*_multiDomainIterator)};
88 }
89
90 int level() const
91 {
92 return _multiDomainIterator.level();
93 }
94
95public:
96
97private:
98
99 const GridImp* _grid;
100 const IndexSet* _indexSet;
101 MultiDomainIterator _multiDomainIterator;
102 MultiDomainIterator _end;
103
104};
105
106} // namespace subdomain
107
108} // namespace mdgrid
109
110} // namespace Dune
111
112#endif // DUNE_GRID_MULTIDOMAINGRID_SUBDOMAINGRID_ITERATOR_HH
Definition: multidomaingrid.hh:8
Definition: subdomaingrid/entity.hh:157
Definition: subdomaingrid.hh:203
Definition: subdomaingrid/iterator.hh:28
typename GridImp::template Codim< codim >::Entity Entity
Definition: subdomaingrid/iterator.hh:43