@@ -288,7 +288,7 @@ Sequence Search and Comparison
288288 namespace oneapi::dpl::ranges {
289289
290290 // equal
291- template<typename ExecutionPolicy, std::ranges::random_access_range R1,
291+ template <typename ExecutionPolicy, std::ranges::random_access_range R1,
292292 std::ranges::random_access_range R2, typename Pred = std::ranges::equal_to,
293293 typename Proj1 = std::identity, typename Proj2 = std::identity>
294294 requires oneapi::dpl::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> &&
@@ -299,7 +299,7 @@ Sequence Search and Comparison
299299 Proj1 proj1 = {}, Proj2 proj2 = {});
300300
301301 // mismatch
302- template<typename ExecutionPolicy, std::ranges::random_access_range R1,
302+ template <typename ExecutionPolicy, std::ranges::random_access_range R1,
303303 std::ranges::random_access_range R2, typename Pred = std::ranges::equal_to,
304304 typename Proj1 = std::identity, typename Proj2 = std::identity>
305305 requires oneapi::dpl::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> &&
@@ -312,7 +312,7 @@ Sequence Search and Comparison
312312 Proj1 proj1 = {}, Proj2 proj2 = {});
313313
314314 // find_end
315- template<typename ExecutionPolicy, std::ranges::random_access_range R1,
315+ template <typename ExecutionPolicy, std::ranges::random_access_range R1,
316316 std::ranges::random_access_range R2, typename Pred = std::ranges::equal_to,
317317 typename Proj1 = std::identity, typename Proj2 = std::identity>
318318 requires oneapi::dpl::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> &&
@@ -324,7 +324,7 @@ Sequence Search and Comparison
324324 Proj1 proj1 = {}, Proj2 proj2 = {});
325325
326326 // search
327- template<typename ExecutionPolicy, std::ranges::random_access_range R1,
327+ template <typename ExecutionPolicy, std::ranges::random_access_range R1,
328328 std::ranges::random_access_range R2, typename Pred = std::ranges::equal_to,
329329 typename Proj1 = std::identity, typename Proj2 = std::identity>
330330 requires oneapi::dpl::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> &&
@@ -336,7 +336,7 @@ Sequence Search and Comparison
336336 Proj1 proj1 = {}, Proj2 proj2 = {});
337337
338338 // search_n
339- template<typename ExecutionPolicy, std::ranges::random_access_range R,
339+ template <typename ExecutionPolicy, std::ranges::random_access_range R,
340340 typename Pred = std::ranges::equal_to, typename Proj = std::identity,
341341 typename T = /*projected-value-type*/<std::ranges::iterator_t<R>, Proj>>
342342 requires oneapi::dpl::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> &&
@@ -346,10 +346,21 @@ Sequence Search and Comparison
346346 search_n (ExecutionPolicy&& pol, R&& r, std::ranges::range_difference_t<R> count,
347347 const T& value, Pred pred = {}, Proj proj = {});
348348
349+ // lexicographical_compare
350+ template <typename ExecutionPolicy, std::ranges::random_access_range R1,
351+ std::ranges::random_access_range R2, typename Proj1 = std::identity,
352+ typename Proj2 = std::identity,
353+ std::indirect_strict_weak_order< std::projected<std::ranges::iterator_t<R1>, Proj1>,
354+ std::projected<std::ranges::iterator_t<R2>, Proj2> >
355+ Comp = std::ranges::less>
356+ requires oneapi::dpl::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> &&
357+ std::ranges::sized_range<R1> && std::ranges::sized_range<R2>
358+ bool lexicographical_compare (ExecutionPolicy&& pol, R1&& r1, R2&& r2, Comp comp = {},
359+ Proj1 proj1 = {}, Proj2 proj2 = {});
349360 }
350361
351- Sorting and Merge
352- +++++++++++++++++
362+ Sorting, Merge, and Heap Operations
363+ +++++++++++++++++++++++++++++++++++
353364
354365.. code :: cpp
355366
@@ -433,6 +444,34 @@ Sorting and Merge
433444 merge (ExecutionPolicy&& pol, R1&& r1, R2&& r2, OutR&& result, Comp comp = {},
434445 Proj1 proj1 = {}, Proj2 proj2 = {});
435446
447+ // inplace_merge
448+ template <typename ExecutionPolicy, std::ranges::random_access_range R,
449+ typename Comp = std::ranges::less, typename Proj = std::identity>
450+ requires oneapi::dpl::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> &&
451+ std::ranges::sized_range<R> && std::sortable<std::ranges::iterator_t<R>, Comp, Proj>
452+ std::ranges::borrowed_iterator_t<R>
453+ inplace_merge (ExecutionPolicy&& pol, R&& r, std::ranges::iterator_t<R> middle,
454+ Comp comp = {}, Proj proj = {});
455+
456+ // is_heap
457+ template <typename ExecutionPolicy, std::ranges::random_access_range R,
458+ typename Proj = std::identity,
459+ std::indirect_strict_weak_order< std::projected<std::ranges::iterator_t<R>, Proj> >
460+ Comp = std::ranges::less>
461+ requires oneapi::dpl::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> &&
462+ std::ranges::sized_range<R>
463+ bool is_heap (ExecutionPolicy&& pol, R&& r, Comp comp = {}, Proj proj = {});
464+
465+ // is_heap_until
466+ template <typename ExecutionPolicy, std::ranges::random_access_range R,
467+ typename Proj = std::identity,
468+ std::indirect_strict_weak_order< std::projected<std::ranges::iterator_t<R>, Proj> >
469+ Comp = std::ranges::less>
470+ requires oneapi::dpl::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> &&
471+ std::ranges::sized_range<R>
472+ std::ranges::borrowed_iterator_t<R>
473+ is_heap_until (ExecutionPolicy&& pol, R&& r, Comp comp = {}, Proj proj = {});
474+
436475 }
437476
438477 Set operations
@@ -518,6 +557,7 @@ Set operations
518557 std::ranges::borrowed_iterator_t<OutR>>
519558 set_symmetric_difference (ExecutionPolicy&& pol, R1&& r1, R2&& r2, OutR&& result,
520559 Comp comp = {}, Proj1 proj1 = {}, Proj2 proj2 = {});
560+
521561 }
522562
523563 Copying Mutating Operations
@@ -560,6 +600,31 @@ Copying Mutating Operations
560600 std::ranges::borrowed_iterator_t<OutR>>
561601 move (ExecutionPolicy&& pol, R&& r, OutR&& result);
562602
603+ // remove_copy
604+ template <typename ExecutionPolicy, std::ranges::random_access_range R,
605+ std::ranges::random_access_range OutR, typename Proj = std::identity,
606+ typename T = /*projected-value-type*/<std::ranges::iterator_t<R>, Proj>>
607+ requires oneapi::dpl::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> &&
608+ std::ranges::sized_range<R> && std::ranges::sized_range<OutR> &&
609+ std::indirectly_copyable<std::ranges::iterator_t<R>, std::ranges::iterator_t<OutR>> &&
610+ std::indirect_binary_predicate< std::ranges::equal_to,
611+ std::projected<std::ranges::iterator_t<R>, Proj>,
612+ const T* >
613+ std::ranges::remove_copy_result<std::ranges::borrowed_iterator_t<R>,
614+ std::ranges::borrowed_iterator_t<OutR>>
615+ remove_copy (ExecutionPolicy&& pol, R&& r, OutR&& result, const T& value, Proj proj = {});
616+
617+ // remove_copy_if
618+ template <typename ExecutionPolicy, std::ranges::random_access_range R,
619+ std::ranges::random_access_range OutR, typename Proj = std::identity,
620+ std::indirect_unary_predicate< std::projected<std::ranges::iterator_t<R>, Proj> > Pred>
621+ requires oneapi::dpl::is_execution_policy_v<std::remove_cvref_t<ExecutionPolicy>> &&
622+ std::ranges::sized_range<R> && std::ranges::sized_range<OutR> &&
623+ std::indirectly_copyable<std::ranges::iterator_t<R>, std::ranges::iterator_t<OutR>>
624+ std::ranges::remove_copy_if_result<std::ranges::borrowed_iterator_t<R>,
625+ std::ranges::borrowed_iterator_t<OutR>>
626+ remove_copy_if (ExecutionPolicy&& pol, R&& r, OutR&& result, Pred pred, Proj proj = {});
627+
563628 // reverse_copy
564629 template <typename ExecutionPolicy, std::ranges::random_access_range R,
565630 std::ranges::random_access_range OutR>
0 commit comments