Commit 452eab42 authored by Pranjal Raihan's avatar Pranjal Raihan Committed by Facebook GitHub Bot

Do not use ranges-v3 in folly::coro::collectAll(Try)Range

Reviewed By: yfeldblum

Differential Revision: D31256615

fbshipit-source-id: 0e1e5234b48a7bfeacc3f0f9c7cf394480ceee86
parent 749d107b
...@@ -1053,7 +1053,7 @@ auto collectAnyRange(InputRange awaitables) -> folly::coro::Task<std::pair< ...@@ -1053,7 +1053,7 @@ auto collectAnyRange(InputRange awaitables) -> folly::coro::Task<std::pair<
} }
co_await folly::coro::co_withCancellation( co_await folly::coro::co_withCancellation(
cancelToken, folly::coro::collectAllRange(tasks | ranges::views::move)); cancelToken, folly::coro::collectAllRange(detail::MoveRange(tasks)));
co_return firstCompletion; co_return firstCompletion;
} }
...@@ -1094,7 +1094,7 @@ auto collectAnyNoDiscardRange(InputRange awaitables) ...@@ -1094,7 +1094,7 @@ auto collectAnyNoDiscardRange(InputRange awaitables)
results.resize(taskCount); results.resize(taskCount);
co_await folly::coro::co_withCancellation( co_await folly::coro::co_withCancellation(
cancelToken, folly::coro::collectAllRange(tasks | ranges::views::move)); cancelToken, folly::coro::collectAllRange(detail::MoveRange(tasks)));
co_return results; co_return results;
} }
......
...@@ -26,8 +26,6 @@ ...@@ -26,8 +26,6 @@
#include <folly/experimental/coro/ViaIfAsync.h> #include <folly/experimental/coro/ViaIfAsync.h>
#include <folly/experimental/coro/detail/Traits.h> #include <folly/experimental/coro/detail/Traits.h>
#include <range/v3/view/move.hpp>
#include <functional> #include <functional>
#include <iterator> #include <iterator>
#include <tuple> #include <tuple>
...@@ -68,6 +66,19 @@ using iterator_reference_t = typename std::iterator_traits<Iterator>::reference; ...@@ -68,6 +66,19 @@ using iterator_reference_t = typename std::iterator_traits<Iterator>::reference;
template <typename Range> template <typename Range>
using range_reference_t = iterator_reference_t<range_iterator_t<Range>>; using range_reference_t = iterator_reference_t<range_iterator_t<Range>>;
// A bare-bones std::range implementation that is similar to ranges::views::move
template <typename Container>
class MoveRange {
public:
explicit MoveRange(Container& container) : container_(container) {}
auto begin() { return std::make_move_iterator(container_.begin()); }
auto end() { return std::make_move_iterator(container_.end()); }
private:
Container& container_;
};
} // namespace detail } // namespace detail
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
...@@ -223,14 +234,14 @@ auto collectAllTryRange(InputRange awaitables) ...@@ -223,14 +234,14 @@ auto collectAllTryRange(InputRange awaitables)
// such as Task<U>, are not lvalue awaitable. // such as Task<U>, are not lvalue awaitable.
template <typename SemiAwaitable> template <typename SemiAwaitable>
auto collectAllRange(std::vector<SemiAwaitable> awaitables) auto collectAllRange(std::vector<SemiAwaitable> awaitables)
-> decltype(collectAllRange(awaitables | ranges::views::move)) { -> decltype(collectAllRange(detail::MoveRange(awaitables))) {
co_return co_await collectAllRange(awaitables | ranges::views::move); co_return co_await collectAllRange(detail::MoveRange(awaitables));
} }
template <typename SemiAwaitable> template <typename SemiAwaitable>
auto collectAllTryRange(std::vector<SemiAwaitable> awaitables) auto collectAllTryRange(std::vector<SemiAwaitable> awaitables)
-> decltype(collectAllTryRange(awaitables | ranges::views::move)) { -> decltype(collectAllTryRange(detail::MoveRange(awaitables))) {
co_return co_await collectAllTryRange(awaitables | ranges::views::move); co_return co_await collectAllTryRange(detail::MoveRange(awaitables));
} }
namespace detail { namespace detail {
...@@ -274,9 +285,8 @@ template <typename SemiAwaitable> ...@@ -274,9 +285,8 @@ template <typename SemiAwaitable>
auto makeUnorderedAsyncGenerator( auto makeUnorderedAsyncGenerator(
AsyncScope& scope, std::vector<SemiAwaitable> awaitables) AsyncScope& scope, std::vector<SemiAwaitable> awaitables)
-> decltype(makeUnorderedAsyncGenerator( -> decltype(makeUnorderedAsyncGenerator(
scope, awaitables | ranges::views::move)) { scope, detail::MoveRange(awaitables))) {
auto gen = auto gen = makeUnorderedAsyncGenerator(scope, detail::MoveRange(awaitables));
makeUnorderedAsyncGenerator(scope, awaitables | ranges::views::move);
while (true) { while (true) {
co_yield co_result(co_await co_awaitTry(gen.next())); co_yield co_result(co_await co_awaitTry(gen.next()));
} }
...@@ -285,9 +295,9 @@ template <typename SemiAwaitable> ...@@ -285,9 +295,9 @@ template <typename SemiAwaitable>
auto makeUnorderedTryAsyncGenerator( auto makeUnorderedTryAsyncGenerator(
AsyncScope& scope, std::vector<SemiAwaitable> awaitables) AsyncScope& scope, std::vector<SemiAwaitable> awaitables)
-> decltype(makeUnorderedTryAsyncGenerator( -> decltype(makeUnorderedTryAsyncGenerator(
scope, awaitables | ranges::views::move)) { scope, detail::MoveRange(awaitables))) {
auto gen = auto gen =
makeUnorderedTryAsyncGenerator(scope, awaitables | ranges::views::move); makeUnorderedTryAsyncGenerator(scope, detail::MoveRange(awaitables));
while (true) { while (true) {
co_yield co_result(co_await co_awaitTry(gen.next())); co_yield co_result(co_await co_awaitTry(gen.next()));
} }
...@@ -312,9 +322,8 @@ template <typename SemiAwaitable> ...@@ -312,9 +322,8 @@ template <typename SemiAwaitable>
auto makeUnorderedAsyncGenerator( auto makeUnorderedAsyncGenerator(
CancellableAsyncScope& scope, std::vector<SemiAwaitable> awaitables) CancellableAsyncScope& scope, std::vector<SemiAwaitable> awaitables)
-> decltype(makeUnorderedAsyncGenerator( -> decltype(makeUnorderedAsyncGenerator(
scope, awaitables | ranges::views::move)) { scope, detail::MoveRange(awaitables))) {
auto gen = auto gen = makeUnorderedAsyncGenerator(scope, detail::MoveRange(awaitables));
makeUnorderedAsyncGenerator(scope, awaitables | ranges::views::move);
while (true) { while (true) {
co_yield co_result(co_await co_awaitTry(gen.next())); co_yield co_result(co_await co_awaitTry(gen.next()));
} }
...@@ -323,9 +332,9 @@ template <typename SemiAwaitable> ...@@ -323,9 +332,9 @@ template <typename SemiAwaitable>
auto makeUnorderedTryAsyncGenerator( auto makeUnorderedTryAsyncGenerator(
CancellableAsyncScope& scope, std::vector<SemiAwaitable> awaitables) CancellableAsyncScope& scope, std::vector<SemiAwaitable> awaitables)
-> decltype(makeUnorderedTryAsyncGenerator( -> decltype(makeUnorderedTryAsyncGenerator(
scope, awaitables | ranges::views::move)) { scope, detail::MoveRange(awaitables))) {
auto gen = auto gen =
makeUnorderedTryAsyncGenerator(scope, awaitables | ranges::views::move); makeUnorderedTryAsyncGenerator(scope, detail::MoveRange(awaitables));
while (true) { while (true) {
co_yield co_result(co_await co_awaitTry(gen.next())); co_yield co_result(co_await co_awaitTry(gen.next()));
} }
...@@ -397,18 +406,18 @@ template <typename SemiAwaitable> ...@@ -397,18 +406,18 @@ template <typename SemiAwaitable>
auto collectAllWindowed( auto collectAllWindowed(
std::vector<SemiAwaitable> awaitables, std::size_t maxConcurrency) std::vector<SemiAwaitable> awaitables, std::size_t maxConcurrency)
-> decltype(collectAllWindowed( -> decltype(collectAllWindowed(
awaitables | ranges::views::move, maxConcurrency)) { detail::MoveRange(awaitables), maxConcurrency)) {
co_return co_await collectAllWindowed( co_return co_await collectAllWindowed(
awaitables | ranges::views::move, maxConcurrency); detail::MoveRange(awaitables), maxConcurrency);
} }
template <typename SemiAwaitable> template <typename SemiAwaitable>
auto collectAllTryWindowed( auto collectAllTryWindowed(
std::vector<SemiAwaitable> awaitables, std::size_t maxConcurrency) std::vector<SemiAwaitable> awaitables, std::size_t maxConcurrency)
-> decltype(collectAllTryWindowed( -> decltype(collectAllTryWindowed(
awaitables | ranges::views::move, maxConcurrency)) { detail::MoveRange(awaitables), maxConcurrency)) {
co_return co_await collectAllTryWindowed( co_return co_await collectAllTryWindowed(
awaitables | ranges::views::move, maxConcurrency); detail::MoveRange(awaitables), maxConcurrency);
} }
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
...@@ -540,13 +549,13 @@ auto collectAnyNoDiscardRange(InputRange awaitables) ...@@ -540,13 +549,13 @@ auto collectAnyNoDiscardRange(InputRange awaitables)
// such as Task<U>, are not lvalue awaitable. // such as Task<U>, are not lvalue awaitable.
template <typename SemiAwaitable> template <typename SemiAwaitable>
auto collectAnyRange(std::vector<SemiAwaitable> awaitables) auto collectAnyRange(std::vector<SemiAwaitable> awaitables)
-> decltype(collectAnyRange(awaitables | ranges::views::move)) { -> decltype(collectAnyRange(detail::MoveRange(awaitables))) {
co_return co_await collectAnyRange(awaitables | ranges::views::move); co_return co_await collectAnyRange(detail::MoveRange(awaitables));
} }
template <typename SemiAwaitable> template <typename SemiAwaitable>
auto collectAnyNoDiscardRange(std::vector<SemiAwaitable> awaitables) auto collectAnyNoDiscardRange(std::vector<SemiAwaitable> awaitables)
-> decltype(collectAnyNoDiscardRange(awaitables | ranges::views::move)) { -> decltype(collectAnyNoDiscardRange(detail::MoveRange(awaitables))) {
co_return co_await collectAnyNoDiscardRange(awaitables | ranges::views::move); co_return co_await collectAnyNoDiscardRange(detail::MoveRange(awaitables));
} }
} // namespace coro } // namespace coro
......
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