|
cartobase 6.0.6
|
N-dimensional array line iterator. More...
#include <cartobase/containers/nditerator.h>


Public Member Functions | |
| line_NDIterator (T *buffer, const std::vector< int > &dims) | |
| line_NDIterator (T *buffer, const std::vector< int > &dims, const std::vector< int > &strides, bool optimize_direction=false) | |
| the optional "optimize_direction" parameter allows the iterator to find a contiguous direction (with a stride == 1) and use it as the line dimension. | |
| line_NDIterator (T *buffer, const std::vector< int > &dims, const std::vector< std::size_t > &strides, bool optimize_direction=false) | |
| line_NDIterator (T *buffer, const std::vector< int > &dims, const std::vector< std::ptrdiff_t > &strides, bool optimize_direction=false) | |
| T & | operator* () const |
| T * | operator-> () const |
| void | inc_line_ptr (T *&p) const |
| increment a "line" pointer (advancing through the line) | |
| void | inc_line_ptr (const T *&p) const |
| increment a "line" pointer (advancing through the line) | |
| std::ptrdiff_t | line_length () const |
| line_size * line stride: end of line | |
Public Member Functions inherited from carto::line_NDIterator_base | |
| line_NDIterator_base (const std::vector< int > &dims) | |
| line_NDIterator_base (const std::vector< int > &dims, const std::vector< int > &strides, bool optimize_direction=false) | |
| line_NDIterator_base (const std::vector< int > &dims, const std::vector< std::size_t > &strides, bool optimize_direction=false) | |
| line_NDIterator_base (const std::vector< int > &dims, const std::vector< std::ptrdiff_t > &strides, bool optimize_direction=false) | |
| NDIterator_base & | operator++ () |
| int | line_size () const |
| int | line_direction () const |
| bool | is_contiguous () const |
Public Member Functions inherited from carto::NDIterator_base | |
| NDIterator_base (const std::vector< int > &dims) | |
| NDIterator_base (const std::vector< int > &dims, const std::vector< int > &strides) | |
| NDIterator_base (const std::vector< int > &dims, const std::vector< std::size_t > &strides) | |
| NDIterator_base (const std::vector< int > &dims, const std::vector< std::ptrdiff_t > &strides) | |
| const std::vector< int > & | position () const |
| std::ptrdiff_t | offset () const |
| NDIterator_base & | operator++ () |
| bool | ended () const |
| void | reset () |
Protected Attributes | |
| T * | _buffer |
Protected Attributes inherited from carto::line_NDIterator_base | |
| int | _line_directon |
| std::ptrdiff_t | _line_stride |
| bool | _contiguous |
Protected Attributes inherited from carto::NDIterator_base | |
| std::vector< int > | _dims |
| std::vector< std::ptrdiff_t > | _strides |
| std::vector< int > | _position |
| std::ptrdiff_t | _offset |
| bool | _ended |
Additional Inherited Members | |
Protected Member Functions inherited from carto::line_NDIterator_base | |
| void | set_optimized_direction (bool optimize_direction=false) |
Static Protected Member Functions inherited from carto::NDIterator_base | |
| template<typename T> | |
| static std::vector< std::ptrdiff_t > | to_ptrdiff_v (const std::vector< T > &v) |
N-dimensional array line iterator.
Iterates over every "line" of a N-D array, using strides. The "lines" are arrays over the smallest dimension of the array. Thus the iterator iterates over all dimensions but the smallest one. This allows to optimize code iterating directly on the smallest dimension, which is much more efficient than the regular NDIterator: for a very simple item operation using a line_NDIterator instead of a NDIterator can be about 20 times faster.
Definition at line 201 of file nditerator.h.
|
inline |
Definition at line 583 of file nditerator.h.
References _buffer, and carto::line_NDIterator_base::line_NDIterator_base().
|
inline |
the optional "optimize_direction" parameter allows the iterator to find a contiguous direction (with a stride == 1) and use it as the line dimension.
This way a line pointer can be incremented instead of adding strides. In many cases it does not change much in performance.
Definition at line 591 of file nditerator.h.
References _buffer, and carto::line_NDIterator_base::line_NDIterator_base().
|
inline |
Definition at line 602 of file nditerator.h.
References _buffer, and carto::line_NDIterator_base::line_NDIterator_base().
|
inline |
Definition at line 613 of file nditerator.h.
References _buffer, and carto::line_NDIterator_base::line_NDIterator_base().
|
inline |
increment a "line" pointer (advancing through the line)
Definition at line 646 of file nditerator.h.
References carto::line_NDIterator_base::_contiguous, and carto::line_NDIterator_base::_line_stride.
|
inline |
increment a "line" pointer (advancing through the line)
Definition at line 636 of file nditerator.h.
References carto::line_NDIterator_base::_contiguous, and carto::line_NDIterator_base::_line_stride.
|
inline |
line_size * line stride: end of line
Definition at line 656 of file nditerator.h.
References carto::line_NDIterator_base::_line_directon, carto::NDIterator_base::_strides, carto::line_NDIterator_base::is_contiguous(), and carto::line_NDIterator_base::line_size().
|
inline |
Definition at line 623 of file nditerator.h.
References _buffer, and carto::NDIterator_base::_offset.
|
inline |
Definition at line 629 of file nditerator.h.
References _buffer, and carto::NDIterator_base::_offset.
|
protected |
Definition at line 231 of file nditerator.h.
Referenced by line_NDIterator(), line_NDIterator(), line_NDIterator(), line_NDIterator(), operator*(), and operator->().