[libcxx-commits] [PATCH] D126529: [libc++] Implement ranges::find_first_of

Mark de Wever via Phabricator via libcxx-commits libcxx-commits at lists.llvm.org
Wed Jun 1 11:45:36 PDT 2022


Mordante accepted this revision as: Mordante.
Mordante added a comment.

LGTM, modulo one comment.
Since I'm not too involved in ranges I prefer to leave the final approval to @var-const or @ldionne.



================
Comment at: libcxx/include/__algorithm/ranges_find_first_of.h:42
+                              _Proj2& __proj2) {
+    for (; __first1 != __last1; ++__first1) {
+      for (auto __j = __first2; __j != __last2; ++__j) {
----------------
philnik wrote:
> Mordante wrote:
> > I saw @ldionne recently raised some concerns regarding duplicating algorithms for the ranges and non-ranges version. Have we found a solution for that concern?
> I think we have to decide that on a case-by-case basis. There are cases where I think it's more hassle than it's worth like here and there are cases where it's a definite win, like `copy` or `move`. There are of course also cases where it's not really clear, like `binary_search`. Note that there are optimizations possible for the ranges algorithms which are simply not possible for the classical algorithms (like in `ranges::is_permutation`) and ones where making optimizations for the ranges version properly is a lot harder (like `ranges::move`).
Thanks for the info!


================
Comment at: libcxx/test/std/algorithms/alg.nonmodifying/alg.find.first.of/ranges.find_first_of.pass.cpp:147
+    {
+      auto ret = std::ranges::find_first_of(a, a + 4, b, b + 1, std::ranges::greater{});
+      assert(ret == a + 2);
----------------
Mordante wrote:
> For clarity I would prefer to use `std::begin()` and `std::end()` here.
Can you do the same for similar places in the tests?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D126529/new/

https://reviews.llvm.org/D126529



More information about the libcxx-commits mailing list