Commit 7b8d4986 authored by Yedidya Feldblum's avatar Yedidya Feldblum Committed by Facebook Github Bot

Avoid linear recursion in folly::coro::concat

Summary: [Folly] Avoid linear recursion in `folly::coro::concat`.

Reviewed By: kirkshoop

Differential Revision: D18746601

fbshipit-source-id: a383715bfc47ae8c0d4baad8799e98699c7cc14f
parent 30fa5801
......@@ -19,21 +19,13 @@
namespace folly {
namespace coro {
template <typename Head>
detail::enable_if_async_generator_t<Head> concat(Head head) {
return std::move(head);
}
template <typename Head, typename... Tail>
detail::enable_if_async_generator_t<Head> concat(Head head, Tail... tail) {
using Reference = typename Head::reference;
while (auto val = co_await head.next()) {
co_yield std::move(val).value();
}
auto tailGen = concat(std::move(tail)...);
while (auto val = co_await tailGen.next()) {
co_yield std::move(val).value();
using list = Head[];
for (auto& gen : list{std::move(head), std::move(tail)...}) {
while (auto val = co_await gen.next()) {
co_yield std::move(val).value();
}
}
}
......
......@@ -42,9 +42,6 @@ namespace coro {
//
// return result;
// }
template <typename Head>
detail::enable_if_async_generator_t<Head> concat(Head head);
template <typename Head, typename... Tail>
detail::enable_if_async_generator_t<Head> concat(Head head, Tail... tail);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment