21concept HandleLike =
requires(T handle, Invoker *invoker) {
22 typename T::ReturnType;
23 { handle.set_invoker(invoker) } -> std::same_as<void>;
24 { handle.extract_result() } -> std::same_as<typename T::ReturnType>;
25 { handle.cancel() } -> std::same_as<void>;
29concept OpFinishHandleLike = HandleLike<T> &&
requires(T handle) {
30 { handle.invoke() } -> std::same_as<void>;
31 { handle.set_result(0, 0) } -> std::same_as<void>;
35concept AwaiterLike =
requires(T awaiter) {
36 typename T::HandleType;
37 { awaiter.get_handle() } -> std::same_as<typename T::HandleType *>;
38 { awaiter.init_finish_handle() } -> std::same_as<void>;
39 { awaiter.register_operation(0) } -> std::same_as<void>;
40 { awaiter.await_ready() } -> std::same_as<bool>;
41 { awaiter.await_suspend(std::declval<std::coroutine_handle<>>()) };
43 awaiter.await_resume()
44 } -> std::same_as<typename T::HandleType::ReturnType>;
49 std::ranges::range<T> && AwaiterLike<std::ranges::range_value_t<T>>;
52concept BufferRingLike =
requires(T br) {
53 typename T::ReturnType;
54 { br.bgid() } -> std::same_as<uint16_t>;
55 { br.handle_finish(0, 0) } -> std::same_as<typename T::ReturnType>;
59concept BundledBufferRing =
60 std::same_as<std::decay_t<T>, BundledProvidedBufferPool> ||
61 std::same_as<std::decay_t<T>, BundledProvidedBufferQueue>;
64concept NotBundledBufferRing = BufferRingLike<T> && !BundledBufferRing<T>;
67concept BufferLike = std::derived_from<std::decay_t<T>, BufferBase>;
70concept FdLike = std::same_as<std::decay_t<T>,
int> ||
71 std::same_as<std::decay_t<T>, detail::FixedFd>;
Basic buffer types and conversion utilities.
Polymorphic invocation utilities.
The main namespace for the Condy library.
Definition condy.hpp:28
Support for io_uring provided buffers.