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...>;
20 using Awaiter = std::conditional_t<kSharedCount == 0, MultiAwaitAwaiter<AwaitEvent<true>>,
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>;
32 using Awaiter = std::conditional_t<kShared, MultiAwaitAwaiter<DynamicSharedEvent<AwaitEvent<true>>>,
37template <
typename It,
typename Sentinel,
38 typename = std::enable_if_t<is_input_range_pair_v<It, Sentinel> &&
42 "Use AwaitSticky(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 AwaitSticky(Waited &waited) noexcept