3#ifndef DUNE_GRID_MMESHINCIDENTITERATOR_HH
4#define DUNE_GRID_MMESHINCIDENTITERATOR_HH
11#include <dune/grid/common/gridenums.hh>
15template <
class Gr
idImp,
int dim>
21 EntityIterator<0, Grid, MMeshIncidentIteratorImp<Grid, Grid::dimension>>;
24template <
class Gr
idImp,
int dim>
30 EntityIterator<0, Grid,
34template <
class Gr
idImp,
int dim>
40 EntityIterator<1, Grid,
44template <
class Gr
idImp,
int dim>
50 Grid::dimension, Grid,
58template <
class Gr
idImp>
62 typedef typename GridImp::template HostGridEntity<GridImp::dimension>
64 typedef typename GridImp::template HostGridEntity<0> HostGridEntity;
67 using ElementContainer = std::vector<HostGridEntity>;
70 enum { codimension = 0 };
72 typedef typename GridImp::template Codim<0>::Entity Entity;
75 const HostGridVertex& hostEntity)
76 : mMesh_(mMesh), i_(0) {
77 auto circulator = mMesh->getHostGrid().incident_faces(hostEntity);
78 for (std::size_t i = 0; i < CGAL::circulator_size(circulator);
80 if (!mMesh->getHostGrid().is_infinite(circulator))
81 elementContainer_.push_back(circulator);
89 const HostGridVertex& hostEntity,
91 : mMesh_(mMesh), i_(0) {
92 auto circulator = mMesh->getHostGrid().incident_faces(hostEntity);
93 for (std::size_t i = 0; i < CGAL::circulator_size(circulator);
95 if (!mMesh->getHostGrid().is_infinite(circulator)) ++i_;
102 Entity
dereference()
const {
return Entity{{mMesh_, elementContainer_[i_]}}; }
106 return i_ == iter.i_;
110 const GridImp* mMesh_;
111 ElementContainer elementContainer_;
116template <
class Gr
idImp>
120 typedef typename GridImp::template HostGridEntity<GridImp::dimension>
122 typedef typename GridImp::template HostGridEntity<0> HostGridEntity;
125 using ElementOutput =
typename GridImp::ElementOutput;
128 using ElementContainer = std::vector<HostGridEntity>;
131 enum { codimension = 0 };
133 typedef typename GridImp::template Codim<0>::Entity Entity;
136 const HostGridVertex& hostEntity)
137 : mMesh_(mMesh), i_(0) {
138 ElementOutput elements;
139 mMesh_->getHostGrid().finite_incident_cells(hostEntity,
140 std::back_inserter(elements));
142 typename ElementOutput::iterator fit;
143 for (fit = elements.begin(); fit != elements.end(); fit++)
144 elementContainer_.push_back(*fit);
152 const HostGridVertex& hostEntity,
154 : mMesh_(mMesh), i_(0) {
155 ElementOutput elements;
156 mMesh_->getHostGrid().finite_incident_cells(hostEntity,
157 std::back_inserter(elements));
159 typename ElementOutput::iterator fit;
160 for (fit = elements.begin(); fit != elements.end(); fit++) ++i_;
167 Entity
dereference()
const {
return Entity{{mMesh_, elementContainer_[i_]}}; }
171 return i_ == iter.i_;
175 const GridImp* mMesh_;
176 ElementContainer elementContainer_;
181template <
class Gr
idImp>
185 typedef typename GridImp::template HostGridEntity<GridImp::dimension - 1>
187 typedef typename GridImp::template HostGridEntity<0> HostGridEntity;
190 using Circulator =
typename GridImp::HostGridType::Cell_circulator;
191 using ElementContainer = std::vector<HostGridEntity>;
194 enum { codimension = 0 };
196 typedef typename GridImp::template Codim<0>::Entity Entity;
199 const HostGridEdge& hostEntity)
200 : mMesh_(mMesh), i_(0) {
201 Circulator circulator = mMesh_->getHostGrid().incident_cells(hostEntity);
202 for (std::size_t i = 0; i < CGAL::circulator_size(circulator);
204 if (!mMesh->getHostGrid().is_infinite(circulator))
205 elementContainer_.push_back(circulator);
213 const HostGridEdge& hostEntity,
215 : mMesh_(mMesh), i_(0) {
216 Circulator circulator = mMesh_->getHostGrid().incident_cells(hostEntity);
217 for (std::size_t i = 0; i < CGAL::circulator_size(circulator);
219 if (!mMesh->getHostGrid().is_infinite(circulator)) ++i_;
226 Entity
dereference()
const {
return Entity{{mMesh_, elementContainer_[i_]}}; }
230 return i_ == iter.i_;
234 const GridImp* mMesh_;
235 ElementContainer elementContainer_;
244template <
class Gr
idImp>
248 typedef typename GridImp::template HostGridEntity<GridImp::dimension>
250 typedef typename GridImp::template HostGridEntity<1> HostGridEntity;
253 using Circulator =
typename GridImp::HostGridType::Edge_circulator;
254 using ElementContainer = std::vector<HostGridEntity>;
257 enum { codimension = 1 };
259 typedef typename GridImp::template Codim<1>::Entity Entity;
262 const HostGridVertex& hostEntity)
263 : mMesh_(mMesh), i_(0) {
264 Circulator circulator = mMesh->getHostGrid().incident_edges(hostEntity);
265 for (std::size_t i = 0; i < CGAL::circulator_size(circulator);
267 if (!mMesh->getHostGrid().is_infinite(circulator))
268 elementContainer_.push_back(*circulator);
276 const HostGridVertex& hostEntity,
278 : mMesh_(mMesh), i_(0) {
279 Circulator circulator = mMesh->getHostGrid().incident_edges(hostEntity);
280 for (std::size_t i = 0; i < CGAL::circulator_size(circulator);
282 if (!mMesh->getHostGrid().is_infinite(circulator)) ++i_;
289 Entity
dereference()
const {
return Entity{{mMesh_, elementContainer_[i_]}}; }
293 return i_ == iter.i_;
297 const GridImp* mMesh_;
298 ElementContainer elementContainer_;
303template <
class Gr
idImp>
307 typedef typename GridImp::template HostGridEntity<GridImp::dimension>
309 typedef typename GridImp::template HostGridEntity<1> HostGridEntity;
312 using ElementOutput =
typename GridImp::BoundaryEdgesOutput;
315 using ElementContainer = std::vector<HostGridEntity>;
318 enum { codimension = 1 };
320 typedef typename GridImp::template Codim<1>::Entity Entity;
323 const HostGridVertex& hostEntity)
324 : mMesh_(mMesh), i_(0) {
325 ElementOutput elements;
326 mMesh_->getHostGrid().finite_incident_facets(hostEntity,
327 std::back_inserter(elements));
329 typename ElementOutput::iterator fit;
330 for (fit = elements.begin(); fit != elements.end(); fit++)
331 elementContainer_.push_back(*fit);
339 const HostGridVertex& hostEntity,
341 : mMesh_(mMesh), i_(0) {
342 ElementOutput elements;
343 mMesh_->getHostGrid().finite_incident_facets(hostEntity,
344 std::back_inserter(elements));
346 typename ElementOutput::iterator fit;
347 for (fit = elements.begin(); fit != elements.end(); fit++) ++i_;
354 Entity
dereference()
const {
return Entity{{mMesh_, elementContainer_[i_]}}; }
358 return i_ == iter.i_;
362 const GridImp* mMesh_;
363 ElementContainer elementContainer_;
372template <
class Gr
idImp>
376 typedef typename GridImp::VertexHandle HostGridVertex;
379 using Circulator =
typename GridImp::HostGridType::Vertex_circulator;
380 using ElementContainer = std::vector<HostGridVertex>;
383 enum { codimension = GridImp::dimension };
385 typedef typename GridImp::template Codim<codimension>::Entity Entity;
388 const HostGridVertex& hostEntity,
389 bool includeInfinite)
390 : mMesh_(mMesh), i_(0) {
391 Circulator circulator = mMesh->getHostGrid().incident_vertices(hostEntity);
392 for (std::size_t i = 0; i < CGAL::circulator_size(circulator);
394 if (includeInfinite || !mMesh->getHostGrid().is_infinite(circulator))
395 elementContainer_.push_back(circulator);
403 const HostGridVertex& hostEntity,
404 bool includeInfinite,
bool endDummy)
405 : mMesh_(mMesh), i_(0) {
406 Circulator circulator = mMesh->getHostGrid().incident_vertices(hostEntity);
407 for (std::size_t i = 0; i < CGAL::circulator_size(circulator);
409 if (includeInfinite || !mMesh->getHostGrid().is_infinite(circulator))
417 Entity
dereference()
const {
return Entity{{mMesh_, elementContainer_[i_]}}; }
421 return i_ == iter.i_;
425 const GridImp* mMesh_;
426 ElementContainer elementContainer_;
431template <
class Gr
idImp>
435 typedef typename GridImp::VertexHandle HostGridVertex;
438 using ElementOutput = std::list<HostGridVertex>;
441 using ElementContainer = std::vector<HostGridVertex>;
444 enum { codimension = GridImp::dimension };
446 typedef typename GridImp::template Codim<codimension>::Entity Entity;
449 const HostGridVertex& hostEntity,
450 bool includeInfinite)
451 : mMesh_(mMesh), i_(0) {
452 ElementOutput elements;
453 mMesh_->getHostGrid().incident_vertices(hostEntity,
454 std::back_inserter(elements));
456 typename ElementOutput::iterator fit;
457 for (fit = elements.begin(); fit != elements.end(); fit++)
458 if (includeInfinite || !mMesh->getHostGrid().is_infinite(*fit))
459 elementContainer_.push_back(*fit);
467 const HostGridVertex& hostEntity,
468 bool includeInfinite,
bool endDummy)
469 : mMesh_(mMesh), i_(0) {
470 ElementOutput elements;
471 mMesh_->getHostGrid().incident_vertices(hostEntity,
472 std::back_inserter(elements));
474 typename ElementOutput::iterator fit;
475 for (fit = elements.begin(); fit != elements.end(); fit++)
476 if (includeInfinite || !mMesh->getHostGrid().is_infinite(*fit)) ++i_;
483 Entity
dereference()
const {
return Entity{{mMesh_, elementContainer_[i_]}}; }
487 return i_ == iter.i_;
491 const GridImp* mMesh_;
492 ElementContainer elementContainer_;
bool equals(const MMeshEdgeIncidentIteratorImp &iter) const
equality
Definition: incidentiterator.hh:229
MMeshEdgeIncidentIteratorImp(const GridImp *mMesh, const HostGridEdge &hostEntity, bool endDummy)
Constructor which creates the end iterator.
Definition: incidentiterator.hh:212
void increment()
prefix increment
Definition: incidentiterator.hh:223
Entity dereference() const
dereferencing
Definition: incidentiterator.hh:226
Forward declaration.
Definition: incidentiterator.hh:25
void increment()
prefix increment
Definition: incidentiterator.hh:286
Entity dereference() const
dereferencing
Definition: incidentiterator.hh:289
MMeshIncidentFacetsIteratorImp(const GridImp *mMesh, const HostGridVertex &hostEntity, bool endDummy)
Constructor which creates the end iterator.
Definition: incidentiterator.hh:275
bool equals(const MMeshIncidentFacetsIteratorImp &iter) const
equality
Definition: incidentiterator.hh:292
MMeshIncidentFacetsIteratorImp(const GridImp *mMesh, const HostGridVertex &hostEntity, bool endDummy)
Constructor which creates the end iterator.
Definition: incidentiterator.hh:338
Entity dereference() const
dereferencing
Definition: incidentiterator.hh:354
bool equals(const MMeshIncidentFacetsIteratorImp &iter) const
equality
Definition: incidentiterator.hh:357
void increment()
prefix increment
Definition: incidentiterator.hh:351
Forward declaration.
Definition: incidentiterator.hh:35
MMeshIncidentIteratorImp(const GridImp *mMesh, const HostGridVertex &hostEntity, bool endDummy)
Constructor which creates the end iterator.
Definition: incidentiterator.hh:88
bool equals(const MMeshIncidentIteratorImp &iter) const
equality
Definition: incidentiterator.hh:105
void increment()
prefix increment
Definition: incidentiterator.hh:99
Entity dereference() const
dereferencing
Definition: incidentiterator.hh:102
bool equals(const MMeshIncidentIteratorImp &iter) const
equality
Definition: incidentiterator.hh:170
MMeshIncidentIteratorImp(const GridImp *mMesh, const HostGridVertex &hostEntity, bool endDummy)
Constructor which creates the end iterator.
Definition: incidentiterator.hh:151
void increment()
prefix increment
Definition: incidentiterator.hh:164
Entity dereference() const
dereferencing
Definition: incidentiterator.hh:167
Forward declaration.
Definition: incidentiterator.hh:16
Entity dereference() const
dereferencing
Definition: incidentiterator.hh:417
MMeshIncidentVerticesIteratorImp(const GridImp *mMesh, const HostGridVertex &hostEntity, bool includeInfinite, bool endDummy)
Constructor which creates the end iterator.
Definition: incidentiterator.hh:402
bool equals(const MMeshIncidentVerticesIteratorImp &iter) const
equality
Definition: incidentiterator.hh:420
void increment()
prefix increment
Definition: incidentiterator.hh:414
MMeshIncidentVerticesIteratorImp(const GridImp *mMesh, const HostGridVertex &hostEntity, bool includeInfinite, bool endDummy)
Constructor which creates the end iterator.
Definition: incidentiterator.hh:466
Entity dereference() const
dereferencing
Definition: incidentiterator.hh:483
bool equals(const MMeshIncidentVerticesIteratorImp &iter) const
equality
Definition: incidentiterator.hh:486
void increment()
prefix increment
Definition: incidentiterator.hh:480
Forward declaration.
Definition: incidentiterator.hh:45
EntityIterator< Grid::dimension, Grid, MMeshIncidentVerticesIteratorImp< Grid, Grid::dimensionworld > > MMeshIncidentVerticesIterator
The Incident Facets Iterator alias.
Definition: incidentiterator.hh:51
EntityIterator< 0, Grid, MMeshEdgeIncidentIteratorImp< Grid, Grid::dimension > > MMeshEdgeIncidentIterator
The Incident Entity Iterator alias for edges.
Definition: incidentiterator.hh:31
EntityIterator< 0, Grid, MMeshIncidentIteratorImp< Grid, Grid::dimension > > MMeshIncidentIterator
The Incident Entity Iterator alias.
Definition: incidentiterator.hh:21
EntityIterator< 1, Grid, MMeshIncidentFacetsIteratorImp< Grid, Grid::dimension > > MMeshIncidentFacetsIterator
The Incident Facets Iterator alias.
Definition: incidentiterator.hh:41