20class BundledProvidedBufferPool;
21class BundledProvidedBufferQueue;
26concept HandleLike =
requires(T handle, Invoker *invoker) {
27 typename std::decay_t<T>::ReturnType;
28 { handle.set_invoker(invoker) } -> std::same_as<void>;
30 handle.extract_result()
31 } -> std::same_as<typename std::decay_t<T>::ReturnType>;
32 { handle.cancel() } -> std::same_as<void>;
36concept OpFinishHandleLike =
37 HandleLike<T> &&
requires(T handle, io_uring_cqe *cqe) {
38 { handle.invoke() } -> std::same_as<void>;
39 { handle.handle_cqe(cqe) } -> std::same_as<detail::Action>;
43concept PrepFuncLike =
requires(T prep_func, Ring *ring) {
44 { prep_func(ring) } -> std::same_as<io_uring_sqe *>;
48concept CQEHandlerLike =
requires(T handler, io_uring_cqe *cqe) {
49 typename std::decay_t<T>::ReturnType;
50 { handler.handle_cqe(cqe) } -> std::same_as<void>;
52 handler.extract_result()
53 } -> std::same_as<typename std::decay_t<T>::ReturnType>;
57concept AwaiterLike =
requires(T awaiter) {
58 typename std::decay_t<T>::HandleType;
61 } -> std::same_as<typename std::decay_t<T>::HandleType *>;
62 { awaiter.init_finish_handle() } -> std::same_as<void>;
63 { awaiter.register_operation(0) } -> std::same_as<void>;
64 { awaiter.await_ready() } -> std::same_as<bool>;
65 { awaiter.await_suspend(std::declval<std::coroutine_handle<>>()) };
67 awaiter.await_resume()
68 } -> std::same_as<typename std::decay_t<T>::HandleType::ReturnType>;
73 std::ranges::range<T> && AwaiterLike<std::ranges::range_value_t<T>>;
76concept BufferRingLike =
requires(T br) {
77 typename std::decay_t<T>::ReturnType;
78 { br.bgid() } -> std::same_as<uint16_t>;
80 br.handle_finish(0, 0)
81 } -> std::same_as<typename std::decay_t<T>::ReturnType>;
85concept BundledBufferRing =
86 std::same_as<std::decay_t<T>, detail::BundledProvidedBufferPool> ||
87 std::same_as<std::decay_t<T>, detail::BundledProvidedBufferQueue>;
90concept NotBundledBufferRing = BufferRingLike<T> && !BundledBufferRing<T>;
93concept BufferLike = std::derived_from<std::decay_t<T>, BufferBase>;
96concept FdLike = std::same_as<std::decay_t<T>,
int> ||
97 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.