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

94.7% Lines (18/19) 90.0% List of functions (18/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()() :86 4x 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()() :86 44617x 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()() :86 4x 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()() :86 49049x 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() :93 0 0.0% 0.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() :93 104x 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() :93 0 0.0% 0.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() :93 93x 57.1% 50.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()() :105 3x 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()() :105 4852x 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()() :105 3x 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()() :105 3580x 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()() :112 3x 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()() :112 4852x 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()() :112 3x 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()() :112 3574x 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()() :119 1x 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()() :119 4x 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()() :119 1x 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()() :119 4x 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
35 : reactor_op<Socket, Acceptor>
36 {
37 void operator()() override;
38 void cancel() noexcept override;
39 };
40
41 template<class Traits, class Socket, class Acceptor, class Endpoint>
42 struct reactor_stream_connect_op final
43 : reactor_connect_op<
44 reactor_stream_base_op<Traits, Socket, Acceptor, Endpoint>,
45 Endpoint>
46 {
47 void operator()() override;
48 };
49
50 template<class Traits, class Socket, class Acceptor, class Endpoint>
51 struct reactor_stream_read_op final
52 : reactor_read_op<
53 reactor_stream_base_op<Traits, Socket, Acceptor, Endpoint>>
54 {
55 };
56
57 template<class Traits, class Socket, class Acceptor, class Endpoint>
58 struct reactor_stream_write_op final
59 : reactor_write_op<
60 reactor_stream_base_op<Traits, Socket, Acceptor, Endpoint>,
61 typename Traits::write_policy>
62 {
63 };
64
65 template<class Traits, class Socket, class Acceptor, class Endpoint>
66 struct reactor_stream_accept_op final
67 : reactor_accept_op<
68 reactor_stream_base_op<Traits, Socket, Acceptor, Endpoint>,
69 typename Traits::accept_policy>
70 {
71 void operator()() override;
72 };
73
74 template<class Traits, class Socket, class Acceptor, class Endpoint>
75 struct reactor_stream_wait_op final
76 : reactor_wait_op<
77 reactor_stream_base_op<Traits, Socket, Acceptor, Endpoint>>
78 {
79 void operator()() override;
80 };
81
82 // --- Deferred implementations (instantiated when Socket/Acceptor are complete) ---
83
84 template<class Traits, class Socket, class Acceptor, class Endpoint>
85 void
86 93674x reactor_stream_base_op<Traits, Socket, Acceptor, Endpoint>::operator()()
87 {
88 93674x complete_io_op(*this);
89 93674x }
90
91 template<class Traits, class Socket, class Acceptor, class Endpoint>
92 void
93 197x reactor_stream_base_op<Traits, Socket, Acceptor, Endpoint>::cancel() noexcept
94 {
95 197x if (this->socket_impl_)
96 191x this->socket_impl_->cancel_single_op(*this);
97 6x else if (this->acceptor_impl_)
98 6x this->acceptor_impl_->cancel_single_op(*this);
99 else
100 this->request_cancel();
101 197x }
102
103 template<class Traits, class Socket, class Acceptor, class Endpoint>
104 void
105 8438x reactor_stream_connect_op<Traits, Socket, Acceptor, Endpoint>::operator()()
106 {
107 8438x complete_connect_op(*this);
108 8438x }
109
110 template<class Traits, class Socket, class Acceptor, class Endpoint>
111 void
112 8432x reactor_stream_accept_op<Traits, Socket, Acceptor, Endpoint>::operator()()
113 {
114 8432x complete_accept_op<Socket>(*this);
115 8432x }
116
117 template<class Traits, class Socket, class Acceptor, class Endpoint>
118 void
119 10x reactor_stream_wait_op<Traits, Socket, Acceptor, Endpoint>::operator()()
120 {
121 10x complete_wait_op(*this);
122 10x }
123
124 } // namespace boost::corosio::detail
125
126 #endif // BOOST_COROSIO_NATIVE_DETAIL_REACTOR_REACTOR_STREAM_OPS_HPP
127