[libc++][PSTL] Implement std::generate{,_n}
Reviewed By: #libc, ldionne
Spies: ldionne, libcxx-commits
Differential Revision: https://reviews.llvm.org/D152581
diff --git a/libcxx/include/algorithm b/libcxx/include/algorithm
index 2ceedc9..fefa98a 100644
--- a/libcxx/include/algorithm
+++ b/libcxx/include/algorithm
@@ -401,6 +401,11 @@
requires invocable<F&> && indirectly_writable<O, invoke_result_t<F&>>
constexpr O generate(O first, S last, F gen); // since C++20
+ template<class ExecutionPolicy, class ForwardIterator, class Generator>
+ void generate(ExecutionPolicy&& exec,
+ ForwardIterator first, ForwardIterator last,
+ Generator gen); // since C++17
+
template<class R, copy_constructible F>
requires invocable<F&> && output_range<R, invoke_result_t<F&>>
constexpr borrowed_iterator_t<R> generate(R&& r, F gen); // since C++20
@@ -409,6 +414,10 @@
requires invocable<F&> && indirectly_writable<O, invoke_result_t<F&>>
constexpr O generate_n(O first, iter_difference_t<O> n, F gen); // since C++20
+ template<class ExecutionPolicy, class ForwardIterator, class Size, class Generator>
+ ForwardIterator generate_n(ExecutionPolicy&& exec,
+ ForwardIterator first, Size n, Generator gen); // since C++17
+
template<input_iterator I1, sentinel_for<I1> S1, input_iterator I2, sentinel_for<I2> S2,
class Pred = ranges::equal_to, class Proj1 = identity, class Proj2 = identity>
requires indirectly_comparable<I1, I2, Pred, Proj1, Proj2>
@@ -1806,6 +1815,7 @@
#include <__algorithm/pstl_fill.h>
#include <__algorithm/pstl_find.h>
#include <__algorithm/pstl_for_each.h>
+#include <__algorithm/pstl_generate.h>
#include <__algorithm/pstl_merge.h>
#include <__algorithm/pstl_replace.h>
#include <__algorithm/pstl_stable_sort.h>