25 template <
class DISPATCHER,
class>
26 ThreadFuturePtr<std::vector<T>>
29 return join<ThreadContext>(
ThreadContextTag{}, dispatcher, std::move(futures));
33 template <
class DISPATCHER,
class>
37 return join<ThreadFuture>(
ThreadContextTag{}, dispatcher, std::move(futures));
41 template <
class DISPATCHER,
class>
45 return join<CoroContext>(
CoroContextTag{}, dispatcher, std::move(futures));
49 template <
class DISPATCHER,
class>
53 return join<CoroFuture>(
CoroContextTag{}, dispatcher, std::move(futures));
57 template <
template<
class>
class FUTURE,
class DISPATCHER>
61 #if (__cplusplus == 201103L) 62 std::shared_ptr<std::vector<typename FUTURE<T>::Ptr>> containerPtr(
new std::vector<
typename FUTURE<T>::Ptr>(std::move(futures)));
65 std::vector<T> result;
66 result.reserve(containerPtr->size());
67 for (
auto&& f : *containerPtr)
69 result.emplace_back(f->get());
71 return promise->set(std::move(result));
74 return dispatcher.template postAsyncIo<std::vector<T>>([container{std::move(futures)}](ThreadPromisePtr<std::vector<T>> promise)
76 std::vector<T> result;
77 result.reserve(container.size());
78 for (
auto&& f : container)
80 result.emplace_back(f->get());
82 return promise->set(std::move(result));
88 template <
template<
class>
class FUTURE,
class DISPATCHER>
89 CoroContextPtr<std::vector<T>>
90 FutureJoiner<T>::join(CoroContextTag, DISPATCHER& dispatcher, std::vector<
typename FUTURE<T>::Ptr>&& futures)
92 #if (__cplusplus == 201103L) 93 std::shared_ptr<std::vector<typename FUTURE<T>::Ptr>> containerPtr(
new std::vector<
typename FUTURE<T>::Ptr>(std::move(futures)));
94 return dispatcher.template post<std::vector<T>>([containerPtr](CoroContextPtr<std::vector<T>> ctx)
96 std::vector<T> result;
97 result.reserve(containerPtr->size());
98 for (
auto&& f : *containerPtr)
100 result.emplace_back(f->get(ctx));
102 return ctx->set(std::move(result));
105 return dispatcher.template post<std::vector<T>>([container{std::move(futures)}](CoroContextPtr<std::vector<T>> ctx)
107 std::vector<T> result;
108 result.reserve(container.size());
109 for (
auto&& f : container)
111 result.emplace_back(f->get(ctx));
113 return ctx->set(std::move(result));
typename IThreadPromise< Promise, T >::Ptr ThreadPromisePtr
Definition: quantum_ithread_promise.h:82
Definition: quantum_buffer_impl.h:22
typename ICoroFuture< T >::Ptr CoroFuturePtr
Definition: quantum_icoro_future.h:72
ThreadFuturePtr< std::vector< T > > operator()(DISPATCHER &dispatcher, std::vector< ThreadContextPtr< T >> &&futures)
Join N thread futures.
Definition: quantum_future_joiner_impl.h:27
typename ICoroContext< RET >::Ptr CoroContextPtr
Definition: quantum_icoro_context.h:479
Utility class that joins N futures into a single one.
Definition: quantum_future_joiner.h:39
Definition: quantum_icontext_base.h:26
typename IThreadFuture< T >::Ptr ThreadFuturePtr
Definition: quantum_ithread_future.h:69
Definition: quantum_icontext_base.h:25
typename IThreadContext< RET >::Ptr ThreadContextPtr
Definition: quantum_ithread_context.h:242