24concept HandleLike =
requires(T handle, Invoker *invoker) {
25 typename T::ReturnType;
26 { handle.set_invoker(invoker) } -> std::same_as<void>;
27 { handle.extract_result() } -> std::same_as<typename T::ReturnType>;
28 { handle.cancel() } -> std::same_as<void>;
32concept OpFinishHandleLike =
33 HandleLike<T> &&
requires(T handle, io_uring_cqe *cqe) {
34 { handle.invoke() } -> std::same_as<void>;
35 { handle.handle_cqe(cqe) } -> std::same_as<detail::Action>;
39concept PrepFuncLike =
requires(T prep_func, Ring *ring) {
40 { prep_func(ring) } -> std::same_as<io_uring_sqe *>;
44concept CQEHandlerLike =
requires(T handler, io_uring_cqe *cqe) {
45 typename T::ReturnType;
46 { handler.handle_cqe(cqe) } -> std::same_as<void>;
47 { handler.extract_result() } -> std::same_as<typename T::ReturnType>;
51concept AwaiterLike =
requires(T awaiter) {
52 typename T::HandleType;
53 { awaiter.get_handle() } -> std::same_as<typename T::HandleType *>;
54 { awaiter.init_finish_handle() } -> std::same_as<void>;
55 { awaiter.register_operation(0) } -> std::same_as<void>;
56 { awaiter.await_ready() } -> std::same_as<bool>;
57 { awaiter.await_suspend(std::declval<std::coroutine_handle<>>()) };
59 awaiter.await_resume()
60 } -> std::same_as<typename T::HandleType::ReturnType>;
65 std::ranges::range<T> && AwaiterLike<std::ranges::range_value_t<T>>;
68concept BufferRingLike =
requires(T br) {
69 typename T::ReturnType;
70 { br.bgid() } -> std::same_as<uint16_t>;
71 { br.handle_finish(0, 0) } -> std::same_as<typename T::ReturnType>;
75concept BundledBufferRing =
76 std::same_as<std::decay_t<T>, BundledProvidedBufferPool> ||
77 std::same_as<std::decay_t<T>, BundledProvidedBufferQueue>;
80concept NotBundledBufferRing = BufferRingLike<T> && !BundledBufferRing<T>;
83concept BufferLike = std::derived_from<std::decay_t<T>, BufferBase>;
86concept FdLike = std::same_as<std::decay_t<T>,
int> ||
87 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.
Support for io_uring provided buffers.