deal.II version GIT relicensing-2287-g6548a49e0a 2024-12-20 18:30:00+00:00
|
#include <deal.II/base/linear_index_iterator.h>
Public Types | |
using | iterator_category = std::random_access_iterator_tag |
using | value_type = AccessorType |
using | difference_type = std::ptrdiff_t |
using | reference = const value_type & |
using | pointer = const value_type * |
using | size_type = typename value_type::size_type |
Public Member Functions | |
DerivedIterator & | operator= (const DerivedIterator &it) |
DerivedIterator & | operator++ () |
DerivedIterator | operator++ (int) |
DerivedIterator & | operator-- () |
DerivedIterator | operator-- (int) |
DerivedIterator | operator+ (const difference_type n) const |
DerivedIterator | operator- (const difference_type n) const |
DerivedIterator & | operator+= (const difference_type n) |
DerivedIterator & | operator-= (const difference_type n) |
difference_type | operator- (const DerivedIterator &p) const |
reference | operator* () const |
pointer | operator-> () const |
template<typename OtherIterator > | |
std::enable_if_t< std::is_convertible_v< OtherIterator, DerivedIterator >, bool > | operator== (const OtherIterator &right) const |
template<typename OtherIterator > | |
std::enable_if_t< std::is_convertible_v< OtherIterator, DerivedIterator >, bool > | operator!= (const OtherIterator &right) const |
bool | operator<= (const DerivedIterator &) const |
bool | operator>= (const DerivedIterator &) const |
bool | operator< (const DerivedIterator &) const |
bool | operator> (const DerivedIterator &) const |
Protected Member Functions | |
LinearIndexIterator ()=default | |
LinearIndexIterator (const AccessorType accessor) | |
Protected Attributes | |
AccessorType | accessor |
Many classes in deal.II, such as FullMatrix, TransposeTable, and SparseMatrix, store their data in contiguous buffers (though the interpretation of what the elements of these buffers represent can, of course, be complex). For example, FullMatrix and TransposeTable store their data in row major and column major order respectively, whereas for SparseMatrix the mapping from buffer location to matrix entry \(\mathbf{A}(i, j)\) is more complicated. In any case, however, the contiguous arrangements of elements enables random access iteration.
LinearIndexIterator provides most of the functionality needed to write iterators for these classes. LinearIndexIterator is essentially a simplified version of boost::iterator_facade
that assumes AccessorType
provides certain members (documented below) that completely describe the state of the iterator. The intended use of this class is for containers to define their own accessor classes and then use the curiously recurring template pattern (CRTP) technique to define their iterators. For example, here is a container that uses LinearIndexIterator to define its own iterator classes:
DerivedIterator | As shown in the example above, concrete iterator classes should use this class with the CRTP technique: this provides the boiler-plate comparison and arithmetic operators for iterators. This is necessary for, e.g., LinearIndexIterator::operator++() to return the correct type. |
AccessorType | LinearIndexIterator assumes that the AccessorType template parameter has the following members which completely describe the current state of the iterator:
AccessorType should declare the relevant LinearIndexIterator instantiation to be a friend and define a size_type type. |
Definition at line 138 of file linear_index_iterator.h.
using LinearIndexIterator< DerivedIterator, AccessorType >::iterator_category = std::random_access_iterator_tag |
Iterator category.
Definition at line 147 of file linear_index_iterator.h.
using LinearIndexIterator< DerivedIterator, AccessorType >::value_type = AccessorType |
An alias for the type you get when you dereference an iterator of the current kind.
Definition at line 154 of file linear_index_iterator.h.
using LinearIndexIterator< DerivedIterator, AccessorType >::difference_type = std::ptrdiff_t |
Difference type.
Definition at line 159 of file linear_index_iterator.h.
using LinearIndexIterator< DerivedIterator, AccessorType >::reference = const value_type & |
Reference type.
Definition at line 164 of file linear_index_iterator.h.
using LinearIndexIterator< DerivedIterator, AccessorType >::pointer = const value_type * |
Pointer type.
Definition at line 169 of file linear_index_iterator.h.
using LinearIndexIterator< DerivedIterator, AccessorType >::size_type = typename value_type::size_type |
Size type used by the underlying container.
Definition at line 174 of file linear_index_iterator.h.
|
protecteddefault |
|
inlineprotected |
Constructor that copies an accessor.
Definition at line 503 of file linear_index_iterator.h.
|
inline |
Copy operator.
Definition at line 332 of file linear_index_iterator.h.
|
inline |
Prefix increment.
Definition at line 344 of file linear_index_iterator.h.
|
inline |
Postfix increment.
Definition at line 353 of file linear_index_iterator.h.
|
inline |
Prefix decrement.
Definition at line 364 of file linear_index_iterator.h.
|
inline |
Postfix decrement.
Definition at line 373 of file linear_index_iterator.h.
|
inline |
Return an iterator that is n
entries ahead of the current one.
Definition at line 384 of file linear_index_iterator.h.
|
inline |
Return an iterator that is n
entries behind the current one.
Definition at line 396 of file linear_index_iterator.h.
|
inline |
Increment the iterator position by n
.
Definition at line 408 of file linear_index_iterator.h.
|
inline |
Decrement the iterator position by n
.
Definition at line 419 of file linear_index_iterator.h.
|
inline |
Return the distance between the current iterator and the argument. The distance is given by how many times one has to apply operator++() to the current iterator to get the argument (for a positive return value), or operator--() (for a negative return value).
Definition at line 430 of file linear_index_iterator.h.
|
inline |
Dereferencing operator.
Definition at line 443 of file linear_index_iterator.h.
|
inline |
Dereferencing operator.
Definition at line 452 of file linear_index_iterator.h.
|
inline |
Comparison operator. Returns true
if both iterators point to the same entry in the same container.
Definition at line 257 of file linear_index_iterator.h.
|
inline |
Opposite of operator==().
Definition at line 268 of file linear_index_iterator.h.
|
inline |
Comparison operator: uses the same ordering as operator<(), but also checks for equality.
This function is only valid if both iterators point into the same container.
Definition at line 460 of file linear_index_iterator.h.
|
inline |
Comparison operator: uses the same ordering as operator>(), but also checks for equality.
This function is only valid if both iterators point into the same container.
Definition at line 471 of file linear_index_iterator.h.
|
inline |
Comparison operator. Result is true if either the first row number is smaller or if the row numbers are equal and the first index is smaller.
This function is only valid if both iterators point into the same container.
Definition at line 480 of file linear_index_iterator.h.
|
inline |
Comparison operator. Works in the same way as operator<(), just the other way round.
Definition at line 494 of file linear_index_iterator.h.
|
protected |
Store an object of the accessor class.
Definition at line 325 of file linear_index_iterator.h.