Skip to content

Commit

Permalink
[oneDPL][ranges][zip_view] + implementation fix for 'operator-' betwe…
Browse files Browse the repository at this point in the history
…en zip_view::iterators
  • Loading branch information
MikeDvorskiy committed Nov 28, 2024
1 parent 304e42a commit 1b58400
Showing 1 changed file with 11 additions and 2 deletions.
13 changes: 11 additions & 2 deletions include/oneapi/dpl/pstl/zip_view_impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -189,13 +189,13 @@ class zip_view : public std::ranges::view_interface<zip_view<Views...>> {
friend constexpr auto operator<=>(const iterator& x, const iterator& y)
requires all_random_access<Const, Views...>
{
return x.current_ == y.current_;
return x.current_ <=> y.current_;
}

friend constexpr auto operator-(const iterator& x, const iterator& y)
requires all_random_access<Const, Views...>
{
return std::get<0>(x.current_) - std::get<0>(y.current_);
return x.distance_to_it(y.current_, std::make_index_sequence<sizeof...(Views)>());
}

friend constexpr iterator operator+(iterator it, difference_type n)
Expand Down Expand Up @@ -233,6 +233,15 @@ class zip_view : public std::ranges::view_interface<zip_view<Views...>> {
( (min = std::min(min, (std::get<In>(current_) - std::get<In>(sentinels)))) , ... );
return min;
}
template <std::size_t... In>
constexpr std::common_type_t<std::conditional_t<!Const, std::ranges::range_difference_t<Views>,
std::ranges::range_difference_t<const Views>>...>
distance_to_it(const iterator it, std::index_sequence<0, In...>) const {
auto min = std::get<0>(it.current_) - std::get<0>(current_);

( (min = std::min(min, (std::get<In>(it.current_) - std::get<In>(current_)))) , ... );
return min;
}

friend class zip_view;

Expand Down

0 comments on commit 1b58400

Please sign in to comment.