10template <
typename Waited,
typename = std::enable_if_t<is_waitable_v<Waited>>>
18 using namespace detail;
19 static constexpr auto kSharedCount =
kCount<SharedHandle,
typename Waited::Handle...>;
21 using Event = std::conditional_t<kSharedCount == 0, CoreEvent, StaticSharedEvent<CoreEvent, kSharedCount>>;
26template <
typename It,
typename = std::enable_if_t<is_input_iterator_v<It> &&
27 is_waitable_v<
typename std::iterator_traits<It>::value_type>>>
29 using namespace detail;
30 using Value =
typename std::iterator_traits<It>::value_type;
31 static constexpr auto kShared = std::is_same_v<typename Value::Handle, SharedHandle>;
33 using Event = std::conditional_t<kShared, DynamicSharedEvent<CoreEvent>,
CoreEvent>;
37template <
typename It,
typename Sentinel,
38 typename = std::enable_if_t<is_input_range_pair_v<It, Sentinel> &&
43 "Use AwaitOn(begin, std::distance(begin, end)) instead");
49template <
typename Range,
typename = std::enable_if_t<
#define YACLIB_ASSERT(cond)
Contract< V, T > MakeContract()
Creates related future and promise.
YACLIB_INLINE auto AwaitOn(IExecutor &e, Waited &waited) noexcept