nicole mazzuca
04760bfadb
[libc++][ranges] P1223R5: find_last
( #99312 )
...
Implements [P1223R5][] completely.
Includes an implementation of `find_last`, `find_last_if`, and
`find_last_if_not`.
[P1223R5]: https://wg21.link/p1223r5
2024-07-19 09:42:16 -07:00
ZijunZhaoCCK
a6b846ae1e
[libc++][ranges] Implement ranges::contains_subrange ( #66963 )
2024-02-13 15:42:37 -08:00
Christopher Di Bella
3903438860
[libcxx] adds ranges::fold_left_with_iter and ranges::fold_left ( #75259 )
...
Notable things in this commit:
* refactors `__indirect_binary_left_foldable`, making it slightly
different (but equivalent) to _`indirect-binary-left-foldable`_, which
improves readability (a [patch to the Working Paper][patch] was made)
* omits `__cpo` namespace, since it is not required for implementing
niebloids (a cleanup should happen in 2024)
* puts tests ensuring invocable robustness and dangling correctness
inside the correctness testing to ensure that the algorithms' results
are still correct
[patch]: https://github.com/cplusplus/draft/pull/6734
2023-12-19 21:57:50 -08:00
zijunzhao
996559602b
Update RangesAlgorithm status
...
Reviewed By: philnik, #libc
Differential Revision: https://reviews.llvm.org/D157539
2023-08-09 19:28:00 +00:00
varconst
2c5a548b53
[libc++][ranges][NFC] Revamp the Ranges status page
...
Focus on the not-yet-implemented features: remove most details about the
already-implemented C++20 stuff, list out the major C++23 additions.
Differential Revision: https://reviews.llvm.org/D136657
2022-11-29 14:40:35 -08:00
Nikolas Klauser
4038c859e5
[libc++][ranges] Implement ranges::is_permutation
...
Co-authored-by: Konstantin Varlamov <varconst@apple.com>
Differential Revision: https://reviews.llvm.org/D127194
2022-08-04 10:54:37 -07:00
Nikolas Klauser
a203acb9dd
[libc++][ranges] Implement ranges::clamp
...
Differential Revision: https://reviews.llvm.org/D126193
2022-08-04 02:45:32 -07:00
Konstantin Varlamov
36c746ca2d
[libc++][ranges] Implement ranges::rotate
.
...
Also fix `ranges::stable_sort` and `ranges::inplace_merge` to support
proxy iterators now that their internal implementations can correctly
dispatch `rotate`.
Differential Revision: https://reviews.llvm.org/D130758
2022-08-03 16:04:24 -07:00
Nikolas Klauser
68264b6494
[libc++][ranges] Implement ranges::{prev, next}_permutation
.
...
Co-authored-by: Konstantin Varlamov <varconst@apple.com>
Differential Revision: https://reviews.llvm.org/D129859
2022-08-02 22:46:15 -07:00
Konstantin Varlamov
6bdb642234
[libc++][ranges] Implement ranges::sample
.
...
Differential Revision: https://reviews.llvm.org/D130865
2022-08-02 22:34:23 -07:00
Nikolas Klauser
93172c1c2b
[libc++][ranges] Implement ranges::replace_copy{,_if}
.
...
Co-authored-by: Konstantin Varlamov <varconst@apple.com>
Differential Revision: https://reviews.llvm.org/D129806
2022-08-02 22:32:01 -07:00
Nikolas Klauser
760d2b462c
[libc++][ranges] Implement ranges::remove_copy{, _if}
.
...
Co-authored-by: Hui Xie <hui.xie1990@gmail.com>
Differential Revision: https://reviews.llvm.org/D130599
2022-08-02 22:19:13 -07:00
Konstantin Varlamov
c64c3d31c4
[libc++][ranges][NFC] Fix a few links on the Ranges status page.
2022-08-01 20:43:59 -07:00
Konstantin Varlamov
db7d795978
[libc++][ranges] Implement std::ranges::partial_sort_copy
.
...
Differential Revision: https://reviews.llvm.org/D130532
2022-07-30 02:42:18 -07:00
Hui Xie
72f57e3a30
[libc++][ranges] implement std::ranges::unique{_copy}
...
implement `std::ranges::unique` and `std::ranges::unique_copy`
Differential Revision: https://reviews.llvm.org/D130404
2022-07-29 08:28:17 +01:00
Hui Xie
8a61749f76
[libc++][ranges] implement std::ranges::inplace_merge
...
Differential Revision: https://reviews.llvm.org/D130627
2022-07-28 08:37:48 +01:00
Konstantin Varlamov
d406c6493e
[libc++][ranges] Implement ranges::is_heap{,_until}
.
...
Differential Revision: https://reviews.llvm.org/D130547
2022-07-26 16:11:24 -07:00
Konstantin Varlamov
ead7302bbb
[libc++][ranges] Implement ranges::generate{,_n}
.
...
Differential Revision: https://reviews.llvm.org/D130552
2022-07-26 15:50:32 -07:00
Konstantin Varlamov
14cf74d65d
[libc++][ranges] Implement ranges::shuffle
.
...
Differential Revision: https://reviews.llvm.org/D130321
2022-07-22 09:59:13 -07:00
Hui Xie
c559964d85
[libc++][ranges] implement std::ranges::includes
...
implement `std::ranges::includes` and delegate to `std::includes`
Differential Revision: https://reviews.llvm.org/D130116
2022-07-22 10:27:48 +01:00
Hui Xie
0f6364b8a1
[libc++][ranges] implement std::ranges::equal_range
...
implement `std::ranges::equal_range` which delegates to
`std::equal_range`
Differential Revision: https://reviews.llvm.org/D129796
2022-07-22 10:24:08 +01:00
Konstantin Varlamov
065202f3ca
[libc++][ranges] Implement std::ranges::partition_{point,copy}
.
...
Reviewed By: #libc, huixie90, ldionne
Differential Revision: https://reviews.llvm.org/D130070
2022-07-20 11:39:07 -07:00
varconst
5dd19ada57
[libc++][ranges] Implement ranges::partial_sort
.
...
Differential Revision: https://reviews.llvm.org/D128744
2022-07-19 20:10:34 -07:00
Konstantin Varlamov
8ed702b83f
[libc++][ranges] Implement ranges::{,stable_}partition
.
...
Differential Revision: https://reviews.llvm.org/D129624
2022-07-18 21:06:17 -07:00
Nikolas Klauser
5492b71db3
[libc++] Update RangesAlgorithms.csv
2022-07-15 00:18:31 +02:00
Hui Xie
3151b95dad
[libc++][ranges] implement std::ranges::set_union
...
[libc++][ranges] implement `std::ranges::set_union`
Differential Revision: https://reviews.llvm.org/D129657
2022-07-14 21:05:30 +01:00
Hui Xie
a5c0638dec
[libc++][ranges] implement std::ranges::set_symmetric_difference
...
[libc++][ranges] implement `std::ranges::set_symmetric_difference`
Differential Revision: https://reviews.llvm.org/D129520
2022-07-13 21:24:32 +01:00
Nikolas Klauser
101d1e9b3c
[libc++] Implement ranges::find_end, ranges::search{, _n}
...
Reviewed By: var-const, #libc, huixie90
Spies: thakis, h-vetinari, huixie90, libcxx-commits, mgorny
Differential Revision: https://reviews.llvm.org/D124079
2022-07-13 20:30:55 +02:00
Nikolas Klauser
1f04759316
Revert "[libc++] Implement ranges::find_end, ranges::search{, _n}"
...
This reverts commit 76a76518507ccc59ccdad5b83f44dc8c3d9593c7.
2022-07-13 13:41:25 +02:00
Nikolas Klauser
76a7651850
[libc++] Implement ranges::find_end, ranges::search{, _n}
...
Reviewed By: var-const, #libc, huixie90
Spies: h-vetinari, huixie90, libcxx-commits, mgorny
Differential Revision: https://reviews.llvm.org/D124079
2022-07-13 13:11:26 +02:00
Konstantin Varlamov
d4c53202eb
[libc++][ranges][NFC] Consolidate some repetitive range algorithm tests:
...
- checking that the algorithm supports predicates returning
a non-boolean type that's implicitly convertible to `bool`;
- checking that predicates and/or projections are invoked using
`std::invoke`.
Differential Revision: https://reviews.llvm.org/D129414
2022-07-12 02:06:36 -07:00
Nikolas Klauser
7d426a392f
[libc++] Implement ranges::{reverse, rotate}_copy
...
Reviewed By: var-const, #libc
Spies: huixie90, libcxx-commits, mgorny
Differential Revision: https://reviews.llvm.org/D127211
2022-07-11 21:13:08 +02:00
Hui Xie
96b674f23c
[libc++][ranges] implement std::ranges::set_intersection
...
implement `std::ranges::set_intersection` by reusing the classic `std::set_intersenction`
added unit tests
Differential Revision: https://reviews.llvm.org/D129233
2022-07-11 06:55:09 +01:00
Konstantin Varlamov
c945bd0da6
[libc++][ranges] Implement modifying heap algorithms:
...
- `ranges::make_heap`;
- `ranges::push_heap`;
- `ranges::pop_heap`;
- `ranges::sort_heap`.
Differential Revision: https://reviews.llvm.org/D128115
2022-07-08 13:48:41 -07:00
Konstantin Varlamov
23c7328bad
[libc++][ranges] Implement ranges::nth_element
.
...
Differential Revision: https://reviews.llvm.org/D128149
2022-07-08 11:26:02 -07:00
Hui Xie
1cdec6c96e
[libcxx][ranges] implement std::ranges::set_difference
...
implement `std::ranges::set_difference`
reused classic std::set_difference
added unit tests
Differential Revision: https://reviews.llvm.org/D128983
2022-07-08 13:26:23 +01:00
Nikolas Klauser
a3ac6891f8
[libc++] Fix a few things in RangesAlgorithms.csv
2022-07-07 01:57:20 +02:00
Nikolas Klauser
f8cbe3cdf0
[libc++] Implement ranges::remove{, _if}
...
Reviewed By: var-const, #libc
Spies: huixie90, sstefan1, libcxx-commits, mgorny
Differential Revision: https://reviews.llvm.org/D128618
2022-07-06 18:47:13 +02:00
Hui Xie
25607d143d
[libc++] Implement std::ranges::merge
...
Implement `std::ranges::merge`. added unit tests
Differential Revision: https://reviews.llvm.org/D128611
2022-07-04 13:44:31 +01:00
Konstantin Varlamov
94c7b89fe5
[libc++][ranges] Implement ranges::stable_sort
.
...
Differential Revision: https://reviews.llvm.org/D127834
2022-07-01 16:34:26 -07:00
Konstantin Varlamov
d417710c3a
[libc++][ranges][NFC] Fix a format error on the ranges status page.
2022-06-18 02:22:26 -07:00
Konstantin Varlamov
ff3989e6ae
[libc++][ranges] Implement ranges::sort
.
...
Differential Revision: https://reviews.llvm.org/D127557
2022-06-16 15:21:06 -07:00
Nikolas Klauser
afd5a4f2dc
[libc++] Implement ranges::lexicographical_compare
...
Reviewed By: var-const, Mordante, #libc
Spies: H-G-Hristov, sstefan1, libcxx-commits, mgorny
Differential Revision: https://reviews.llvm.org/D127130
2022-06-15 22:29:21 +02:00
Nikolas Klauser
ee397722cc
[libc++][NFC] Update ranges algorithms status page
2022-06-11 16:21:34 +02:00
Nikolas Klauser
ff6d5dee71
[libc++] Implement ranges::replace{, _if}
...
Reviewed By: var-const, #libc
Spies: libcxx-commits, mgorny
Differential Revision: https://reviews.llvm.org/D126283
2022-06-10 11:54:46 +02:00
Nikolas Klauser
b79b2b6772
[libc++] Implement ranges::find_first_of
...
Reviewed By: Mordante, var-const, #libc
Spies: libcxx-commits, mgorny
Differential Revision: https://reviews.llvm.org/D126529
2022-06-06 22:29:02 +02:00
Nikolas Klauser
8171586176
[libc++][ranges] Implement ranges::binary_search and ranges::{lower, upper}_bound
...
Reviewed By: Mordante, var-const, ldionne, #libc
Spies: sstefan1, libcxx-commits, mgorny
Differential Revision: https://reviews.llvm.org/D121964
2022-06-06 13:33:18 +02:00
varconst
7c63cc198b
[libc++][ranges][NFC] Fix a patch link in ranges status.
2022-06-03 20:39:00 -07:00
varconst
faf43ad7ae
[libc++][ranges][NFC] Mark range algorithms that are in progress.
2022-06-03 20:02:46 -07:00
Nikolas Klauser
3606da5fba
[libc++] Enable ranges_robust_against* and niebloid tests for implemented ranges algorithms
...
Spies: libcxx-commits
Differential Revision: https://reviews.llvm.org/D126477
2022-05-27 10:40:01 +02:00