[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>