include/boost/corosio/native/detail/reactor/reactor_stream_ops.hpp

94.7% Lines (18/0/19) 100.0% List of functions (20/0/20)
reactor_stream_ops.hpp
f(x) Functions (20)
Function Calls Lines Blocks
boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::epoll_traits, boost::corosio::detail::epoll_local_stream_socket, boost::corosio::detail::epoll_local_stream_acceptor, boost::corosio::local_endpoint>::operator()() :83 148x 100.0% 100.0% boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::epoll_traits, boost::corosio::detail::epoll_tcp_socket, boost::corosio::detail::epoll_tcp_acceptor, boost::corosio::endpoint>::operator()() :83 39927x 100.0% 100.0% boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::local_endpoint>::operator()() :83 149x 100.0% 100.0% boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>::operator()() :83 41614x 100.0% 100.0% boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::epoll_traits, boost::corosio::detail::epoll_local_stream_socket, boost::corosio::detail::epoll_local_stream_acceptor, boost::corosio::local_endpoint>::cancel() :90 14x 85.7% 83.0% boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::epoll_traits, boost::corosio::detail::epoll_tcp_socket, boost::corosio::detail::epoll_tcp_acceptor, boost::corosio::endpoint>::cancel() :90 171x 85.7% 83.0% boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::local_endpoint>::cancel() :90 14x 85.7% 83.0% boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>::cancel() :90 126x 85.7% 83.0% boost::corosio::detail::reactor_stream_connect_op<boost::corosio::detail::epoll_traits, boost::corosio::detail::epoll_local_stream_socket, boost::corosio::detail::epoll_local_stream_acceptor, boost::corosio::local_endpoint>::operator()() :102 17x 100.0% 100.0% boost::corosio::detail::reactor_stream_connect_op<boost::corosio::detail::epoll_traits, boost::corosio::detail::epoll_tcp_socket, boost::corosio::detail::epoll_tcp_acceptor, boost::corosio::endpoint>::operator()() :102 2461x 100.0% 100.0% boost::corosio::detail::reactor_stream_connect_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::local_endpoint>::operator()() :102 16x 100.0% 100.0% boost::corosio::detail::reactor_stream_connect_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>::operator()() :102 2071x 100.0% 100.0% boost::corosio::detail::reactor_stream_accept_op<boost::corosio::detail::epoll_traits, boost::corosio::detail::epoll_local_stream_socket, boost::corosio::detail::epoll_local_stream_acceptor, boost::corosio::local_endpoint>::operator()() :109 20x 100.0% 100.0% boost::corosio::detail::reactor_stream_accept_op<boost::corosio::detail::epoll_traits, boost::corosio::detail::epoll_tcp_socket, boost::corosio::detail::epoll_tcp_acceptor, boost::corosio::endpoint>::operator()() :109 2495x 100.0% 100.0% boost::corosio::detail::reactor_stream_accept_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::local_endpoint>::operator()() :109 19x 100.0% 100.0% boost::corosio::detail::reactor_stream_accept_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>::operator()() :109 2077x 100.0% 100.0% boost::corosio::detail::reactor_stream_wait_op<boost::corosio::detail::epoll_traits, boost::corosio::detail::epoll_local_stream_socket, boost::corosio::detail::epoll_local_stream_acceptor, boost::corosio::local_endpoint>::operator()() :116 15x 100.0% 100.0% boost::corosio::detail::reactor_stream_wait_op<boost::corosio::detail::epoll_traits, boost::corosio::detail::epoll_tcp_socket, boost::corosio::detail::epoll_tcp_acceptor, boost::corosio::endpoint>::operator()() :116 47x 100.0% 100.0% boost::corosio::detail::reactor_stream_wait_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_local_stream_socket, boost::corosio::detail::select_local_stream_acceptor, boost::corosio::local_endpoint>::operator()() :116 16x 100.0% 100.0% boost::corosio::detail::reactor_stream_wait_op<boost::corosio::detail::select_traits, boost::corosio::detail::select_tcp_socket, boost::corosio::detail::select_tcp_acceptor, boost::corosio::endpoint>::operator()() :116 45x 100.0% 100.0%
Line TLA Hits Source Code
1 //
2 // Copyright (c) 2026 Michael Vandeberg
3 //
4 // Distributed under the Boost Software License, Version 1.0. (See accompanying
5 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 //
7 // Official repository: https://github.com/cppalliance/corosio
8 //
9
10 #ifndef BOOST_COROSIO_NATIVE_DETAIL_REACTOR_REACTOR_STREAM_OPS_HPP
11 #define BOOST_COROSIO_NATIVE_DETAIL_REACTOR_REACTOR_STREAM_OPS_HPP
12
13 #include <boost/corosio/native/detail/reactor/reactor_op.hpp>
14 #include <boost/corosio/native/detail/reactor/reactor_op_complete.hpp>
15
16 namespace boost::corosio::detail {
17
18 /* Parameterized stream op types for reactor backends.
19
20 Given a Traits type (providing write_policy, accept_policy) and
21 forward-declared Socket/Acceptor types, generates all the concrete
22 op types needed for a stream socket. The cancel() and operator()()
23 bodies reference Socket/Acceptor but are only instantiated when the
24 vtable of a derived type is emitted -- at which point those types
25 are complete.
26
27 @tparam Traits Backend traits (epoll_traits, kqueue_traits, etc.)
28 @tparam Socket The concrete stream socket type (forward-declared).
29 @tparam Acceptor The concrete stream acceptor type (forward-declared).
30 @tparam Endpoint The endpoint type (endpoint or local_endpoint).
31 */
32
33 template<class Traits, class Socket, class Acceptor, class Endpoint>
34 struct reactor_stream_base_op : reactor_op<Socket, Acceptor>
35 {
36 void operator()() override;
37 void cancel() noexcept override;
38 };
39
40 template<class Traits, class Socket, class Acceptor, class Endpoint>
41 struct reactor_stream_connect_op final
42 : reactor_connect_op<
43 reactor_stream_base_op<Traits, Socket, Acceptor, Endpoint>,
44 Endpoint>
45 {
46 void operator()() override;
47 };
48
49 template<class Traits, class Socket, class Acceptor, class Endpoint>
50 struct reactor_stream_read_op final
51 : reactor_read_op<
52 reactor_stream_base_op<Traits, Socket, Acceptor, Endpoint>>
53 {};
54
55 template<class Traits, class Socket, class Acceptor, class Endpoint>
56 struct reactor_stream_write_op final
57 : reactor_write_op<
58 reactor_stream_base_op<Traits, Socket, Acceptor, Endpoint>,
59 typename Traits::write_policy>
60 {};
61
62 template<class Traits, class Socket, class Acceptor, class Endpoint>
63 struct reactor_stream_accept_op final
64 : reactor_accept_op<
65 reactor_stream_base_op<Traits, Socket, Acceptor, Endpoint>,
66 typename Traits::accept_policy>
67 {
68 void operator()() override;
69 };
70
71 template<class Traits, class Socket, class Acceptor, class Endpoint>
72 struct reactor_stream_wait_op final
73 : reactor_wait_op<
74 reactor_stream_base_op<Traits, Socket, Acceptor, Endpoint>>
75 {
76 void operator()() override;
77 };
78
79 // --- Deferred implementations (instantiated when Socket/Acceptor are complete) ---
80
81 template<class Traits, class Socket, class Acceptor, class Endpoint>
82 void
83 81838x reactor_stream_base_op<Traits, Socket, Acceptor, Endpoint>::operator()()
84 {
85 81838x complete_io_op(*this);
86 81838x }
87
88 template<class Traits, class Socket, class Acceptor, class Endpoint>
89 void
90 325x reactor_stream_base_op<Traits, Socket, Acceptor, Endpoint>::cancel() noexcept
91 {
92 325x if (this->socket_impl_)
93 237x this->socket_impl_->cancel_single_op(*this);
94 88x else if (this->acceptor_impl_)
95 88x this->acceptor_impl_->cancel_single_op(*this);
96 else
97 this->request_cancel();
98 325x }
99
100 template<class Traits, class Socket, class Acceptor, class Endpoint>
101 void
102 4565x reactor_stream_connect_op<Traits, Socket, Acceptor, Endpoint>::operator()()
103 {
104 4565x complete_connect_op(*this);
105 4565x }
106
107 template<class Traits, class Socket, class Acceptor, class Endpoint>
108 void
109 4611x reactor_stream_accept_op<Traits, Socket, Acceptor, Endpoint>::operator()()
110 {
111 4611x complete_accept_op<Socket>(*this);
112 4611x }
113
114 template<class Traits, class Socket, class Acceptor, class Endpoint>
115 void
116 123x reactor_stream_wait_op<Traits, Socket, Acceptor, Endpoint>::operator()()
117 {
118 123x complete_wait_op(*this);
119 123x }
120
121 } // namespace boost::corosio::detail
122
123 #endif // BOOST_COROSIO_NATIVE_DETAIL_REACTOR_REACTOR_STREAM_OPS_HPP
124