Condy v1.7.0
C++ Asynchronous System Call Layer for Linux
Loading...
Searching...
No Matches
concepts.hpp
Go to the documentation of this file.
1
4
5#pragma once
6
7#include <concepts>
8#include <cstdint>
9#include <type_traits>
10
11struct io_uring_cqe;
12struct io_uring_sqe;
13
14namespace condy {
15
16class Ring;
17
18namespace detail {
19
20struct FixedFd;
21
22} // namespace detail
23
24template <typename T>
25concept PrepFuncLike = requires(T prep_func, Ring *ring) {
26 { prep_func(ring) } -> std::same_as<io_uring_sqe *>;
27};
28
29template <typename T>
30concept CQEHandlerLike = requires(T handler, io_uring_cqe *cqe) {
31 { handler(cqe) } noexcept;
32};
33
34template <typename T>
35concept BufferRingLike = requires(T br, io_uring_cqe *cqe) {
36 { br.bgid() } -> std::same_as<uint16_t>;
37 { br.handle_finish(cqe) };
38};
39
40template <typename T>
41concept BufferLike = requires { typename std::remove_cvref_t<T>::CondyBuffer; };
42
43template <typename T>
44concept FdLike = std::same_as<std::remove_cvref_t<T>, int> ||
45 std::same_as<std::remove_cvref_t<T>, detail::FixedFd>;
46
47template <typename T, typename... Us>
48concept AnySameAs = (std::same_as<T, Us> || ...);
49
50template <typename T>
51concept SenderLike =
52 requires(T sender) { typename std::remove_cvref_t<T>::CondySender; };
53
54} // namespace condy
The main namespace for the Condy library.
Definition condy.hpp:31