ACTS
Experiment-independent tracking
Loading...
Searching...
No Matches
detray::ranges::detail::cartesian_product_iterator< iterator_ts > Struct Template Reference

Iterator implementation for the cartesian product view. More...

#include <detray/utils/ranges/cartesian_product.hpp>

Inheritance diagram for detray::ranges::detail::cartesian_product_iterator< iterator_ts >:
[legend]

Public Types

using difference_type = std::ptrdiff_t
 Difference type used to report iterator distances.
using iterator_category = detray::ranges::bidirectional_iterator_tag
 Iterator category supported by this product iterator.
using pointer = value_type *
 Pointer type corresponding to the tuple value type.
using reference = value_type
 Dereference result type.
using value_type = std::tuple<std::iter_reference_t<iterator_ts>...>
 Tuple of references yielded by dereferencing the iterator.

Public Member Functions

constexpr cartesian_product_iterator ()=default
 Default constructor required by LegacyIterator trait.
constexpr cartesian_product_iterator (dtuple< iterator_ts... > begins, dtuple< iterator_ts... > ends)
 Construct from a collection of begins and ends positions.
constexpr decltype(auto) operator* () const
constexpr bool operator== (const cartesian_product_iterator &rhs) const
constexpr auto operator++ () -> cartesian_product_iterator &
 Increment iterators.
constexpr auto operator++ (int) -> cartesian_product_iterator
 Advance to the next product element and return the previous iterator.
constexpr auto operator-- () -> cartesian_product_iterator &
 Decrement iterators.
constexpr auto operator-- (int) -> cartesian_product_iterator
 Move to the previous product element and return the previous iterator.

Detailed Description

template<std::input_iterator... iterator_ts>
struct detray::ranges::detail::cartesian_product_iterator< iterator_ts >

Iterator implementation for the cartesian product view.

Constructor & Destructor Documentation

◆ cartesian_product_iterator()

template<std::input_iterator... iterator_ts>
detray::ranges::detail::cartesian_product_iterator< iterator_ts >::cartesian_product_iterator ( dtuple< iterator_ts... > begins,
dtuple< iterator_ts... > ends )
constexpr

Construct from a collection of begins and ends positions.

Parameters
beginsinput range start iterators
endsinput range end iterators

Member Function Documentation

◆ operator*()

template<std::input_iterator... iterator_ts>
decltype(auto) detray::ranges::detail::cartesian_product_iterator< iterator_ts >::operator* ( ) const
constexpr
Returns
the structured binding of all current iterator values - const

◆ operator++() [1/2]

template<std::input_iterator... iterator_ts>
auto detray::ranges::detail::cartesian_product_iterator< iterator_ts >::operator++ ( ) ->cartesian_product_iterator &
constexpr

Increment iterators.

Returns
A reference to this iterator after incrementing.

◆ operator++() [2/2]

template<std::input_iterator... iterator_ts>
auto detray::ranges::detail::cartesian_product_iterator< iterator_ts >::operator++ ( int ) ->cartesian_product_iterator
constexpr

Advance to the next product element and return the previous iterator.

Returns
A copy of the iterator before incrementing.

◆ operator--() [1/2]

template<std::input_iterator... iterator_ts>
auto detray::ranges::detail::cartesian_product_iterator< iterator_ts >::operator-- ( ) ->cartesian_product_iterator &
constexpr

Decrement iterators.

Returns
A reference to this iterator after decrementing.

◆ operator--() [2/2]

template<std::input_iterator... iterator_ts>
auto detray::ranges::detail::cartesian_product_iterator< iterator_ts >::operator-- ( int ) ->cartesian_product_iterator
constexpr

Move to the previous product element and return the previous iterator.

Returns
A copy of the iterator before decrementing.

◆ operator==()

template<std::input_iterator... iterator_ts>
bool detray::ranges::detail::cartesian_product_iterator< iterator_ts >::operator== ( const cartesian_product_iterator< iterator_ts > & rhs) const
constexpr
Returns
true if the last range iterators are equal. Compare the leading iterator, which identifies the product end position.
Parameters
rhsiterator to compare against
Returns
whether both iterators denote the same product position