3 #ifndef DUNE_PDELAB_BACKEND_ISTL_VECTORITERATOR_HH 4 #define DUNE_PDELAB_BACKEND_ISTL_VECTORITERATOR_HH 23 template<
typename T,
bool is_const,
typename Tag,
typename... Iterators>
26 template<
typename T,
typename... Iterators>
30 typename tags::container<typename T::block_type>::type::base_tag,
31 Iterators..., typename T::const_iterator
35 template<
typename T,
typename... Iterators>
39 typename tags::container<typename T::block_type>::type::base_tag,
40 Iterators..., typename T::iterator
44 template<
typename T,
typename... Iterators>
47 typedef std::tuple<Iterators...,
typename T::const_iterator>
type;
50 template<
typename T,
typename... Iterators>
53 typedef std::tuple<Iterators...,
typename T::iterator>
type;
57 template<
typename T,
typename... Iterators>
60 typedef std::tuple<Iterators...,
typename T::const_iterator>
type;
63 template<
typename T,
typename... Iterators>
66 typedef std::tuple<Iterators...,
typename T::iterator>
type;
83 :
public std::iterator<std::forward_iterator_tag,
84 typename V::field_type,
85 typename std::ptrdiff_t,
86 typename V::field_type*,
87 typename V::field_type&
93 static const bool is_const =
false;
98 :
public std::iterator<std::forward_iterator_tag,
99 typename V::field_type,
100 typename std::ptrdiff_t,
101 const typename V::field_type*,
102 const typename V::field_type&
108 static const bool is_const =
true;
123 static const bool is_const = BaseT::is_const;
135 if (!start(vector_tag(),level<0>(),vector))
146 , _current(r._current)
147 , _iterators(r._iterators)
156 typename std::enable_if<
163 _current =r._current;
164 _iterators = r._iterators;
196 typename std::enable_if<
197 std::is_same<vector,typename vector_iterator<W>::vector>
::value,
206 return _current == r._current;
213 typename std::enable_if<
214 std::is_same<vector,typename vector_iterator<W>::vector>
::value,
219 return !operator==(r);
224 template<std::
size_t l>
226 :
public std::integral_constant<std::size_t,l>
232 if (!advance(vector_tag(),level<0>()))
236 template<std::
size_t l,
typename Block>
237 bool start_leaf(level<l>, Block& block)
239 typedef typename std::tuple_element<l,Iterators>::type iterator;
240 iterator& it = std::get<l>(_iterators);
241 iterator& end = std::get<l>(_end);
254 template<std::
size_t l,
typename Block>
257 return start_leaf(level<l>(),block);
260 template<std::
size_t l,
typename Block>
263 return start_leaf(level<l>(),block);
266 template<std::
size_t l,
typename Block>
269 _current = &(block[0]);
274 template<std::
size_t l,
typename Block>
277 typedef typename std::tuple_element<l,Iterators>::type iterator;
278 iterator& it = std::get<l>(_iterators);
279 iterator& end = std::get<l>(_end);
296 template<std::
size_t l>
297 bool advance_leaf(level<l>)
299 typedef typename std::tuple_element<l,Iterators>::type iterator;
300 iterator& it = std::get<l>(_iterators);
301 const iterator& end = std::get<l>(_end);
313 template<std::
size_t l>
316 return advance_leaf(level<l>());
319 template<std::
size_t l>
322 return advance_leaf(level<l>());
325 template<std::
size_t l>
332 template<std::
size_t l>
335 typedef typename std::tuple_element<l,Iterators>::type iterator;
336 iterator& it = std::get<l>(_iterators);
337 iterator& end = std::get<l>(_end);
357 typename BaseT::pointer _current;
358 Iterators _iterators;
369 #endif // DUNE_PDELAB_BACKEND_ISTL_VECTORITERATOR_HH Definition: vectoriterator.hh:114
static const unsigned int value
Definition: gridfunctionspace/tags.hh:139
Definition: vectoriterator.hh:24
BaseT::reference operator*() const
Definition: vectoriterator.hh:176
V vector
Definition: vectoriterator.hh:105
Extracts the container tag from T.
Definition: backend/istl/tags.hh:145
tags::container< V >::type::base_tag vector_tag
Definition: vectoriterator.hh:107
vector_iterator & operator++()
Definition: vectoriterator.hh:182
vector_iterator operator++(int)
Definition: vectoriterator.hh:188
std::tuple< Iterators..., typename T::iterator > type
Definition: vectoriterator.hh:66
Tag describing a field vector with block size > 1.
Definition: backend/istl/tags.hh:58
std::enable_if< is_const &&!std::is_same< vector, W >::value &&std::is_same< vector, W >::value, vector_iterator &>::type operator=(const vector_iterator< W > &r)
Definition: vectoriterator.hh:160
Definition: vectoriterator.hh:71
Tag describing a DynamicVector.
Definition: backend/istl/tags.hh:32
std::tuple< Iterators..., typename T::iterator > type
Definition: vectoriterator.hh:53
Definition: vectoriterator.hh:82
Tag describing a field vector with block size 1.
Definition: backend/istl/tags.hh:53
std::enable_if< std::is_same< vector, typename vector_iterator< W >::vector >::value, bool >::type operator==(const vector_iterator< W > &r) const
Definition: vectoriterator.hh:200
vector_iterator(vector_reference vector, bool at_end)
Definition: vectoriterator.hh:130
std::tuple< Iterators..., typename T::const_iterator > type
Definition: vectoriterator.hh:47
BaseT::pointer operator->() const
Definition: vectoriterator.hh:170
For backward compatibility – Do not use this!
Definition: adaptivity.hh:27
vector_iterator(const vector_iterator< W > &r, typename std::enable_if< is_const &&!std::is_same< V, W >::value &&std::is_same< vector, W >::value, void *>::type=nullptr)
Definition: vectoriterator.hh:144
V & vector_reference
Definition: vectoriterator.hh:91
const V & vector_reference
Definition: vectoriterator.hh:106
tags::container< V >::type::base_tag vector_tag
Definition: vectoriterator.hh:92
std::tuple< Iterators..., typename T::const_iterator > type
Definition: vectoriterator.hh:60
V vector
Definition: vectoriterator.hh:90
tags::container< T >::type container_tag(const T &)
Gets instance of container tag associated with T.
Definition: backend/istl/tags.hh:249
Tag describing a BlockVector.
Definition: backend/istl/tags.hh:26
std::enable_if< std::is_same< vector, typename vector_iterator< W >::vector >::value, bool >::type operator!=(const vector_iterator< W > &r) const
Definition: vectoriterator.hh:217