Loading [MathJax]/extensions/TeX/newcommand.js
 deal.II version GIT relicensing-2684-gc61376a70f 2025-02-22 15:30:00+00:00
\newcommand{\dealvcentcolon}{\mathrel{\mathop{:}}} \newcommand{\dealcoloneq}{\dealvcentcolon\mathrel{\mkern-1.2mu}=} \newcommand{\jump}[1]{\left[\!\left[ #1 \right]\!\right]} \newcommand{\average}[1]{\left\{\!\left\{ #1 \right\}\!\right\}}
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
iterator_range.h
Go to the documentation of this file.
1// ------------------------------------------------------------------------
2//
3// SPDX-License-Identifier: LGPL-2.1-or-later
4// Copyright (C) 2014 - 2023 by the deal.II authors
5//
6// This file is part of the deal.II library.
7//
8// Part of the source code is dual licensed under Apache-2.0 WITH
9// LLVM-exception OR LGPL-2.1-or-later. Detailed license information
10// governing the source code and code contributions can be found in
11// LICENSE.md and CONTRIBUTING.md at the top level directory of deal.II.
12//
13// ------------------------------------------------------------------------
14
15#ifndef dealii_iterator_range_h
16#define dealii_iterator_range_h
17
18
19#include <deal.II/base/config.h>
20
23
24#include <iterator>
25
27
28
29// Forward declaration
30#ifndef DOXYGEN
31template <typename Iterator>
33#endif
34
35
127template <typename Iterator>
129{
130public:
135
136
140 using iterator = Iterator;
141
148
157
162 begin();
163
168 begin() const;
169
175 end() const;
176
182 end();
183
184private:
190};
191
192
193
198template <typename Iterator>
200{
201public:
206 using BaseIterator = Iterator;
207
214 explicit IteratorOverIterators(const BaseIterator &iterator);
215
220 const BaseIterator &
221 operator*() const;
222
227 const BaseIterator *
228 operator->() const;
229
235 operator++();
236
243 operator++(int);
244
251 bool
252 operator!=(const IteratorOverIterators &i_o_i) const;
253
267 operator const BaseIterator &() const;
268
274 using iterator_category = std::forward_iterator_tag;
275 using value_type = Iterator;
276 using difference_type = typename Iterator::difference_type;
277 using pointer = Iterator *;
278 using reference = Iterator &;
279
280private:
285};
286
287
288
293template <typename BaseIterator>
297{
298 IteratorRange<BaseIterator> ir(begin, end);
299 return ir;
300}
301
302
303// ------------------- template member functions
304
305
306template <typename Iterator>
308 const BaseIterator &iterator)
309 : element_of_iterator_collection(iterator)
310{}
311
312
313
314template <typename Iterator>
317{
318 return element_of_iterator_collection;
319}
320
321
322
323template <typename Iterator>
326{
327 return &element_of_iterator_collection;
328}
329
330
331
332template <typename Iterator>
335{
336 ++element_of_iterator_collection;
337 return *this;
338}
339
340
341
342template <typename Iterator>
345{
346 const IteratorOverIterators old_value = *this;
347 ++element_of_iterator_collection;
348 return *old_value;
349}
350
351
352
353template <typename Iterator>
354inline bool
356 const IteratorOverIterators &i_o_i) const
357{
358 return element_of_iterator_collection != i_o_i.element_of_iterator_collection;
359}
360
361
362
363template <typename Iterator>
365{
366 return element_of_iterator_collection;
367}
368
369
370
371template <typename Iterator>
373 : it_begin()
374 , it_end()
375{}
376
377
378
379template <typename Iterator>
381 const iterator e)
382 : it_begin(b)
383 , it_end(e)
384{}
385
386
387template <typename Iterator>
390{
391 return it_begin;
392}
393
394
395template <typename Iterator>
398{
399 return it_begin;
400}
401
402
403template <typename Iterator>
406{
407 return it_end;
408}
409
410
411template <typename Iterator>
414{
415 return it_end;
416}
417
418
420
421#endif
typename Iterator::difference_type difference_type
IteratorOverIterators(const BaseIterator &iterator)
BaseIterator element_of_iterator_collection
const BaseIterator & operator*() const
IteratorOverIterators & operator++()
const BaseIterator * operator->() const
std::forward_iterator_tag iterator_category
bool operator!=(const IteratorOverIterators &i_o_i) const
IteratorOverIterators end() const
IteratorOverIterators begin()
::IteratorOverIterators< Iterator > IteratorOverIterators
const IteratorOverIterators it_begin
const IteratorOverIterators it_end
#define DEAL_II_NAMESPACE_OPEN
Definition config.h:522
#define DEAL_II_NAMESPACE_CLOSE
Definition config.h:523
IteratorRange< BaseIterator > make_iterator_range(const BaseIterator &begin, const std_cxx20::type_identity_t< BaseIterator > &end)
typename type_identity< T >::type type_identity_t
Definition type_traits.h:95