Skip to content

Commit e103e9c

Browse files
committed
[libcxx] Optimize std::generate_n for segmented iterators
1 parent 42fb027 commit e103e9c

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

libcxx/include/__algorithm/generate_n.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
#include <__algorithm/for_each_n.h>
1313
#include <__config>
14+
#include <__functional/identity.h>
1415

1516
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
1617
# pragma GCC system_header
@@ -22,9 +23,9 @@ template <class _OutputIterator, class _Size, class _Generator>
2223
inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _OutputIterator
2324
generate_n(_OutputIterator __first, _Size __orig_n, _Generator __gen) {
2425
using __iter_ref = decltype(*__first);
25-
return std::for_each_n(__first, __orig_n, [&](__iter_ref __element) {
26-
std::forward<__iter_ref>(__element) = __gen();
27-
});
26+
__identity __proj;
27+
auto __f = [&](__iter_ref __element) { std::forward<__iter_ref>(__element) = __gen(); };
28+
return std::__for_each_n(__first, __orig_n, __f, __proj);
2829
}
2930

3031
_LIBCPP_END_NAMESPACE_STD

0 commit comments

Comments
 (0)