Condy v1.8
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
16namespace detail {
17
18class Ring;
19struct FixedFd;
20
21} // namespace detail
22
23template <typename T>
24concept PrepFuncLike = requires(T prep_func, detail::Ring *ring) {
25 { prep_func(ring) } -> std::same_as<io_uring_sqe *>;
26};
27
28template <typename T>
29concept CQEHandlerLike = requires(T handler, io_uring_cqe *cqe) {
30 { handler(cqe) } noexcept;
31};
32
33template <typename T>
34concept BufferRingLike = requires(T br, io_uring_cqe *cqe) {
35 { br.bgid() } -> std::same_as<uint16_t>;
36 { br.handle_finish(cqe) };
37};
38
39template <typename T>
40concept BufferLike = requires { typename std::remove_cvref_t<T>::CondyBuffer; };
41
42template <typename T>
43concept FdLike = std::same_as<std::remove_cvref_t<T>, int> ||
44 std::same_as<std::remove_cvref_t<T>, detail::FixedFd>;
45
46template <typename T, typename... Us>
47concept AnySameAs = (std::same_as<T, Us> || ...);
48
49template <typename T>
50concept SenderLike =
51 requires(T sender) { typename std::remove_cvref_t<T>::CondySender; };
52
53} // namespace condy
The main namespace for the Condy library.
Definition condy.hpp:37