34 template <
typename... >
38 template <
typename... Iterators >
39 struct std::iterator_traits<
emlabcpp::zip_iterator< Iterators... > >
56 template <
typename... Iterators >
59 std::tuple< Iterators... > iters_;
63 : iters_( std::move( iters )... )
93 for_each( iters_, [&](
auto& iter ) {
101 return std::get< 0 >( iters_ ) - std::get< 0 >( other.iters_ );
110 return std::forward_as_tuple( ( *it )... );
118 return equals( other, std::index_sequence_for< Iterators... >{} );
122 template <
typename std::size_t... Idx >
123 [[nodiscard]] constexpr
bool
126 return ( ( std::get< Idx >( iters_ ) == std::get< Idx >( other.iters_ ) ) || ... );
130 template <
typename... Iterators >
131 constexpr zip_iterator< Iterators... >
138 template <
typename... Iterators >
142 return !( lh == rh );
156 template <
typename TuplesTuple, std::size_t... ItemIndexes, std::size_t... TupleIndexes >
159 std::index_sequence< ItemIndexes... >,
160 std::index_sequence< TupleIndexes... > )
162 auto f = [&]<
typename Index >( Index ) {
163 return std::make_tuple(
164 std::get< Index::value >( std::get< TupleIndexes >( tpls ) )... );
167 return std::make_tuple(
f( std::integral_constant< std::size_t, ItemIndexes >{} )... );
175 auto zip( Tuple&& frst, Tuples&&... tpls )
178 ( ( static_size_v< Tuple > == static_size_v< Tuples > ) && ... ),
179 "All tuples has to be of same size in zip" );
181 std::make_tuple( frst, tpls... ),
182 std::make_index_sequence< static_size_v< Tuple > >{},
183 std::make_index_sequence<
sizeof...( Tuples ) + 1 >{} );
zip_ierator iterates over a group of iterators, where value is a tuple of references to value for eac...
Definition: zip.h:58
constexpr std::ptrdiff_t operator-(zip_iterator< Iterators... > const &other) const
Definition: zip.h:99
constexpr auto operator*()
Dereference of each iterator, returns tuple of references to the operator* of iterators.
Definition: zip.h:106
constexpr zip_iterator operator++()
Increases each iterator.
Definition: zip.h:68
constexpr zip_iterator operator--()
Decreases each iterator.
Definition: zip.h:80
constexpr zip_iterator(Iterators... iters)
Definition: zip.h:62
constexpr zip_iterator & operator+=(std::ptrdiff_t m)
Definition: zip.h:91
constexpr bool operator==(zip_iterator< Iterators... > const &other) const
Two zip iterators are equal if all of their iterators are equal.
Definition: zip.h:116
std::variant< int64_t, float, bool, string_buffer > value_type
Definition: base.h:51
MIT License.
Definition: impl.h:31
constexpr point< N > operator+(point< N > a, vector< N > const &b)
Returns a result of addition a to b, viz += operator.
Definition: point.h:93
T & reference
Definition: static_storage.h:101
auto zip(Ts &&... cont)
Creates a view of zip iterators for specified containers.
Definition: zip.h:151
view(Container &cont) -> view< iterator_of_t< Container > >
The container deduction guide uses iterator_of_t.
constexpr void for_each(Container &&cont, UnaryCallable &&f)
Applies unary callable 'f' to each element of container 'cont'.
Definition: algorithm.h:171
concept range_container
so, std::ranges::range is meh because it expects return of begin() being input_output_iterator,...
Definition: concepts.h:78
auto tuple_zip_impl(TuplesTuple &&tpls, std::index_sequence< ItemIndexes... >, std::index_sequence< TupleIndexes... >)
Definition: zip.h:157
concept gettable_container
Definition: concepts.h:71
constexpr bool operator!=(pose const &x, pose const &y)
negation of operator== between poses
Definition: pose.h:99
UnaryCallable && f
Definition: algorithm.h:161
value_type reference
Definition: zip.h:44
void pointer
Definition: zip.h:43
std::ptrdiff_t difference_type
Definition: zip.h:42
std::bidirectional_iterator_tag iterator_category
Definition: zip.h:45
std::tuple< typename std::iterator_traits< Iterators >::reference... > value_type
Definition: zip.h:41