Skip to content

Commit 36ee86c

Browse files
committed
address review comments
1 parent 7156521 commit 36ee86c

File tree

2 files changed

+26
-37
lines changed

2 files changed

+26
-37
lines changed

libcxx/include/__algorithm/generate.h

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,26 +19,22 @@
1919

2020
_LIBCPP_BEGIN_NAMESPACE_STD
2121

22-
namespace __generate {
22+
template <class _Generator>
23+
struct __generate_assigner {
24+
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 __generate_assigner(_Generator& __gen) : __gen_(__gen) {}
2325

24-
template <typename _Generator>
25-
struct __fn {
26-
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 __fn(_Generator& __gen) : __gen_(__gen) {}
27-
28-
template <typename _Tp>
26+
template <class _Tp>
2927
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void operator()(_Tp&& __element) const {
3028
std::forward<_Tp>(__element) = __gen_();
3129
}
3230

3331
_Generator& __gen_;
3432
};
3533

36-
} // namespace __generate
37-
3834
template <class _ForwardIterator, class _Generator>
3935
inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void
4036
generate(_ForwardIterator __first, _ForwardIterator __last, _Generator __gen) {
41-
std::for_each(__first, __last, __generate::__fn<_Generator>(__gen));
37+
std::for_each(__first, __last, __generate_assigner<_Generator>(__gen));
4238
}
4339

4440
_LIBCPP_END_NAMESPACE_STD

libcxx/test/std/algorithms/alg.modifying.operations/alg.generate/generate.pass.cpp

Lines changed: 21 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -21,35 +21,29 @@
2121
#include "test_macros.h"
2222
#include "test_iterators.h"
2323

24-
struct gen_test
25-
{
26-
TEST_CONSTEXPR int operator()() const {return 1;}
24+
struct gen_test {
25+
TEST_CONSTEXPR int operator()() const { return 1; }
2726
};
2827

29-
3028
#if TEST_STD_VER > 17
3129
TEST_CONSTEXPR bool test_constexpr() {
32-
int ia[] = {0, 1, 2, 3, 4};
30+
int ia[] = {0, 1, 2, 3, 4};
3331

34-
std::generate(std::begin(ia), std::end(ia), gen_test());
32+
std::generate(std::begin(ia), std::end(ia), gen_test());
3533

36-
return std::all_of(std::begin(ia), std::end(ia), [](int x) { return x == 1; })
37-
;
38-
}
34+
return std::all_of(std::begin(ia), std::end(ia), [](int x) { return x == 1; });
35+
}
3936
#endif
4037

41-
4238
template <class Iter>
43-
void
44-
test()
45-
{
46-
const unsigned n = 4;
47-
int ia[n] = {0};
48-
std::generate(Iter(ia), Iter(ia+n), gen_test());
49-
assert(ia[0] == 1);
50-
assert(ia[1] == 1);
51-
assert(ia[2] == 1);
52-
assert(ia[3] == 1);
39+
void test() {
40+
const unsigned n = 4;
41+
int ia[n] = {0};
42+
std::generate(Iter(ia), Iter(ia + n), gen_test());
43+
assert(ia[0] == 1);
44+
assert(ia[1] == 1);
45+
assert(ia[2] == 1);
46+
assert(ia[3] == 1);
5347
}
5448

5549
void deque_test() {
@@ -61,16 +55,15 @@ void deque_test() {
6155
}
6256
}
6357

64-
int main(int, char**)
65-
{
66-
test<forward_iterator<int*> >();
67-
test<bidirectional_iterator<int*> >();
68-
test<random_access_iterator<int*> >();
69-
test<int*>();
70-
deque_test();
58+
int main(int, char**) {
59+
test<forward_iterator<int*> >();
60+
test<bidirectional_iterator<int*> >();
61+
test<random_access_iterator<int*> >();
62+
test<int*>();
63+
deque_test();
7164

7265
#if TEST_STD_VER > 17
73-
static_assert(test_constexpr());
66+
static_assert(test_constexpr());
7467
#endif
7568

7669
return 0;

0 commit comments

Comments
 (0)