6#ifndef DUNE_GRID_IO_FILE_VTK_BOUNDARYITERATORS_HH
7#define DUNE_GRID_IO_FILE_VTK_BOUNDARYITERATORS_HH
14#include <dune/grid/io/file/vtk/corner.hh>
15#include <dune/grid/io/file/vtk/corneriterator.hh>
16#include <dune/grid/io/file/vtk/functionwriter.hh>
38 < BoundaryIterator<GV>,
39 const typename GV::Intersection,
40 const typename GV::Intersection&,
41 typename std::iterator_traits<typename GV::template Codim<0>::
42 Iterator>::difference_type>
47 typedef const typename GV::Intersection Value;
48 typedef Value& Reference;
50 typedef typename GV::IntersectionIterator IntersectionIterator;
51 typedef typename std::iterator_traits<ElementIterator>::difference_type
60 std::shared_ptr<IntersectionIterator> iit;
64 if(eit == gv->template end<0>())
return true;
66 if((*iit)->boundary() && !(*iit)->neighbor())
return true;
71 void basic_increment() {
73 if(*iit == gv->iend(*eit)) {
76 if(eit != gv->template end<0>())
77 iit.reset(
new IntersectionIterator(gv->ibegin(*eit)));
82 Reference dereference()
const {
86 if(eit != other.eit)
return false;
90 bool mePassedTheEnd = eit == gv->template end<0>();
91 bool otherPassedTheEnd = other.eit == other.gv->template end<0>();
94 if(mePassedTheEnd && otherPassedTheEnd)
return true;
97 if(mePassedTheEnd || otherPassedTheEnd)
return false;
100 return *iit == *other.iit;
105 while(!valid()) basic_increment();
114 const IntersectionIterator& iit_)
115 : gv(&gv_), eit(eit_), iit(new IntersectionIterator(iit_))
117 while(!valid()) basic_increment();
126 : gv(&gv_), eit(eit_)
128 if(eit != gv->template end<0>())
129 iit.reset(
new IntersectionIterator(gv->ibegin(*eit)));
131 while(!valid()) basic_increment();
139 : gv(&gv_), eit(end ? gv->template end<0>() : gv->template begin<0>())
141 if(eit != gv->template end<0>())
142 iit.reset(
new IntersectionIterator(gv->ibegin(*eit)));
144 while(!valid()) basic_increment();
148 template<
typename ElementIndexSet>
149 class IntersectionIndexSet {
150 const ElementIndexSet& eis;
153 IntersectionIndexSet(
const ElementIndexSet& eis_)
158 template<
typename GV>
159 class NonConformingBoundaryIteratorFactory {
163 static const unsigned dimCell = GV::dimension-1;
165 typedef typename GV::Intersection Cell;
166 typedef BoundaryIterator<GV> CellIterator;
168 typedef VTK::Corner<Cell> Corner;
169 typedef VTK::CornerIterator<CellIterator> CornerIterator;
171 typedef Corner Point;
172 typedef CornerIterator PointIterator;
174 typedef NonConformingConnectivityWriter<Cell> ConnectivityWriter;
175 typedef typename GV::Communication Communication;
177 explicit NonConformingBoundaryIteratorFactory(
const GV& gv_)
181 CellIterator beginCells()
const {
182 return CellIterator(gv);
184 CellIterator endCells()
const {
185 return CellIterator(gv,
true);
188 CornerIterator beginCorners()
const {
189 return CornerIterator(beginCells(), endCells());
191 CornerIterator endCorners()
const {
192 return CornerIterator(endCells());
195 PointIterator beginPoints()
const {
return beginCorners(); }
196 PointIterator endPoints()
const {
return endCorners(); }
198 ConnectivityWriter makeConnectivity()
const {
199 return ConnectivityWriter();
201 const Communication& comm()
const {
Base class for stl conformant forward iterators.
Definition: iteratorfacades.hh:141
iterate over the GridViews boundary intersections
Definition: boundaryiterators.hh:43
BoundaryIterator(const GV &gv_, const ElementIterator &eit_)
construct a BoundaryIterator
Definition: boundaryiterators.hh:125
BoundaryIterator(const GV &gv_, bool end=false)
construct a BoundaryIterator
Definition: boundaryiterators.hh:138
BoundaryIterator(const GV &gv_, const ElementIterator &eit_, const IntersectionIterator &iit_)
construct a BoundaryIterator
Definition: boundaryiterators.hh:113
This file implements iterator facade classes for writing stl conformant iterators.
Dune namespace.
Definition: alignedallocator.hh:13
Static tag representing a codimension.
Definition: dimension.hh:24