DUNE PDELab (git)

pointiterator.hh
1// SPDX-FileCopyrightText: Copyright © DUNE Project contributors, see file LICENSE.md in module root
2// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
3// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
4// vi: set et ts=4 sw=2 sts=2:
5
6#ifndef DUNE_GRID_IO_FILE_VTK_POINTITERATOR_HH
7#define DUNE_GRID_IO_FILE_VTK_POINTITERATOR_HH
8
9#include <iterator>
10#include <vector>
11
14
15#include <dune/grid/io/file/vtk/corner.hh>
16#include <dune/grid/io/file/vtk/corneriterator.hh>
17
18namespace Dune
19{
22
23 namespace VTK {
24
26
49 template<typename CellIterator, typename IS>
52 < PointIterator<CellIterator, IS>,
53 const Corner<typename std::remove_const<typename std::iterator_traits<
54 CellIterator>::value_type>::type>,
55 const Corner<typename std::remove_const<typename std::iterator_traits<
56 CellIterator>::value_type>::type>&,
57 typename std::iterator_traits<CellIterator>::difference_type>
58 {
59 public:
60 typedef VTK::Corner<typename std::remove_const<typename std::iterator_traits<
61 CellIterator>::value_type>::type> Corner;
62
63 // reiterate the facades typedefs here
65 typedef const Corner Value;
66 typedef Value& Reference;
67 typedef typename std::iterator_traits<CellIterator>::difference_type
68 DifferenceType;
69
70 static const unsigned mydim = std::iterator_traits<CellIterator>::
71 value_type::mydimension;
72
73 private:
75 DifferenceType> Facade;
76
78 const IS* is;
79 std::vector<bool> seen;
80
81 public:
82 Reference dereference() const {
83 return *cornerit;
84 }
85
86 bool isDereferencable() const {
87 return cornerit.isDereferencable();
88 }
89
90 bool equals(const DerivedType& other) const {
91 return cornerit == other.cornerit;
92 }
93
94 void increment() {
95 for(++cornerit; isDereferencable(); ++cornerit) {
96 typename IS::IndexType index =
97 is->subIndex(cornerit->cell(), cornerit->duneIndex(), mydim);
98
99 if(!seen[index]) {
100 seen[index] = true;
101 break;
102 }
103 }
104 }
105
107
112 PointIterator(const CellIterator& cellit, const CellIterator& cellend,
113 const IS& is_)
114 : cornerit(cellit, cellend), is(&is_), seen(is->size(mydim), false)
115 { }
117
120 PointIterator(const CellIterator& cellend_)
121 : cornerit(cellend_), is(0)
122 { }
123 };
124
125 } // namespace VTK
126
128
129} // namespace Dune
130
131#endif // DUNE_GRID_IO_FILE_VTK_POINTITERATOR_HH
Base class for stl conformant forward iterators.
Definition: iteratorfacades.hh:142
iterate over the corners of some cell range
Definition: corneriterator.hh:39
simple class representing a corner of a cell
Definition: corner.hh:25
iterate over the points of some corner range
Definition: pointiterator.hh:58
PointIterator(const CellIterator &cellit, const CellIterator &cellend, const IS &is_)
construct a CornerIterator
Definition: pointiterator.hh:112
PointIterator(const CellIterator &cellend_)
construct a CornerIterator
Definition: pointiterator.hh:120
Traits for type conversions and type information.
This file implements iterator facade classes for writing stl conformant iterators.
Dune namespace.
Definition: alignedallocator.hh:13
constexpr std::integral_constant< std::size_t, sizeof...(II)> size(std::integer_sequence< T, II... >)
Return the size of the sequence.
Definition: integersequence.hh:75
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.111.3 (Nov 24, 23:30, 2024)