19template <
typename Event,
typename Timeout,
typename Range>
21 Event event{count + 1};
29 auto token =
event.Make();
33 if constexpr (!std::is_same_v<Timeout, NoTimeoutTag>) {
53 static_assert(
sizeof...(handles) >= 1,
"Number of futures must be at least one");
55 return (... +
static_cast<std::size_t
>(
func(
handles)));
62template <
typename Event,
typename Timeout,
typename Iterator>
65 "Wait function Iterator must be point to some Waitable (Future or SharedFuture)");
72 return static_cast<std::size_t
>(
func(
it->GetBaseHandle()));
79 for (std::size_t
i = 0;
i != count; ++
i) {
#define YACLIB_ASSERT(cond)
bool WaitCore(const Timeout &timeout, Handles... handles) noexcept
template bool WaitCore< DefaultEvent, NoTimeoutTag, SharedHandle >(const NoTimeoutTag &, SharedHandle) noexcept
bool WaitRange(const Timeout &timeout, Range &&range, std::size_t count) noexcept
template bool WaitCore< DefaultEvent, NoTimeoutTag, UniqueHandle >(const NoTimeoutTag &, UniqueHandle) noexcept
bool WaitIterator(const Timeout &timeout, Iterator it, std::size_t count) noexcept
Contract< V, E > MakeContract()
Creates related future and promise.