@@ -748,7 +748,7 @@ __pattern_unique(_Tag __tag, _ExecutionPolicy&& __exec, _R&& __r, _Comp __comp,
748
748
auto __it = oneapi::dpl::__internal::__pattern_unique (__tag, std::forward<_ExecutionPolicy>(__exec),
749
749
__beg, __end, __pred_2);
750
750
751
- return std::ranges:: borrowed_subrange_t <_R>( __it, __end) ;
751
+ return { __it, __end} ;
752
752
}
753
753
754
754
template <typename _Tag, typename _ExecutionPolicy, typename _R, typename _Comp, typename _Proj>
@@ -758,6 +758,27 @@ __pattern_unique(__serial_tag</*IsVector*/ std::false_type>, _ExecutionPolicy&&,
758
758
return std::ranges::unique (std::forward<_R>(__r), __comp, __proj);
759
759
}
760
760
761
+ template <typename _Tag, typename _ExecutionPolicy, typename _R>
762
+ std::ranges::borrowed_subrange_t <_R>
763
+ __pattern_reverse (_Tag __tag, _ExecutionPolicy&& __exec, _R&& __r)
764
+ {
765
+ auto __beg = std::ranges::begin (__r);
766
+ const auto __n = std::ranges::size (__r);
767
+ const auto __n_2 = __n / 2 ;
768
+ auto __r1 = std::ranges::take_view (__r, __n_2);
769
+ auto __r2 = std::ranges::take_view (std::ranges::reverse_view (__r), __n_2);
770
+
771
+ __pattern_swap_ranges (std::forward<_ExecutionPolicy>(__exec), std::move (__r1), std::move (__r2))
772
+ return {__beg + __n};
773
+ }
774
+
775
+ template <typename _Tag, typename _ExecutionPolicy, typename _R>
776
+ std::ranges::borrowed_subrange_t <_R>
777
+ __pattern_reverse (__serial_tag</* IsVector*/ std::false_type>, _ExecutionPolicy&&, _R&& __r)
778
+ {
779
+ return std::ranges::reverse (std::forward<_R>(__r));
780
+ }
781
+
761
782
template <typename _Tag, typename _ExecutionPolicy, typename _R, typename _OutRange, typename _Comp, typename _Proj>
762
783
std::ranges::unique_copy_result<std::ranges::borrowed_iterator_t <_R>, std::ranges::borrowed_iterator_t <_OutRange>>
763
784
__pattern_unique_copy (_Tag __tag, _ExecutionPolicy&& __exec, _R&& __r, _OutRange&& __out_r, _Comp __comp, _Proj __proj)
0 commit comments