19template <
typename Event,
typename Timeout,
typename Range>
22 if constexpr (Event::kShared) {
25 return handle.SetCallback(event.GetCall());
32 return handle.SetCallback(event.GetCall());
41 auto token =
event.Make();
46 if constexpr (!std::is_same_v<Timeout, NoTimeoutTag>) {
66 static_assert(
sizeof...(handles) >= 1,
"Number of futures must be at least one");
69 static_assert(
kSharedCount == 0 || std::is_same_v<Timeout, NoTimeoutTag>);
72 return (... +
static_cast<std::size_t
>(
func(
handles)));
79 using FinalEvent = std::conditional_t<kSharedCount <= 1, CoreEvent, StaticSharedEvent<CoreEvent, kSharedCount>>;
85template <
typename Event,
typename Timeout,
typename Iterator>
88 "Wait function Iterator must be point to some Waitable (Future or SharedFuture)");
89 static constexpr bool kShared = std::is_same_v<
decltype(
it->GetHandle()),
SharedHandle>;
105 for (std::size_t
i = 0;
i != count; ++
i) {
#define YACLIB_ASSERT(cond)
bool WaitRange(Event &event, const Timeout &timeout, Range &&range, std::size_t count) noexcept
bool WaitCore(const Timeout &timeout, Handles... handles) noexcept
template bool WaitCore< DefaultEvent, NoTimeoutTag, SharedHandle >(const NoTimeoutTag &, SharedHandle) 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.