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

71.9% Lines (46/64) 87.5% List of functions (14/16)
reactor_stream_ops.hpp
f(x) Functions (16)
Function Calls Lines Blocks
boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::epoll_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint>, boost::corosio::detail::reactor_acceptor_final<boost::corosio::detail::epoll_traits, boost::corosio::local_stream_acceptor::implementation, boost::corosio::local_endpoint>, boost::corosio::local_endpoint>::operator()() :78 3x 100.0% 100.0% boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::epoll_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint>, boost::corosio::detail::reactor_acceptor_final<boost::corosio::detail::epoll_traits, boost::corosio::tcp_acceptor::implementation, boost::corosio::endpoint>, boost::corosio::endpoint>::operator()() :78 37468x 100.0% 100.0% boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::select_traits, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint>, boost::corosio::detail::reactor_acceptor_final<boost::corosio::detail::select_traits, boost::corosio::local_stream_acceptor::implementation, boost::corosio::local_endpoint>, boost::corosio::local_endpoint>::operator()() :78 3x 100.0% 100.0% boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::select_traits, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint>, boost::corosio::detail::reactor_acceptor_final<boost::corosio::detail::select_traits, boost::corosio::tcp_acceptor::implementation, boost::corosio::endpoint>, boost::corosio::endpoint>::operator()() :78 42709x 100.0% 100.0% boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::epoll_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint>, boost::corosio::detail::reactor_acceptor_final<boost::corosio::detail::epoll_traits, boost::corosio::local_stream_acceptor::implementation, boost::corosio::local_endpoint>, boost::corosio::local_endpoint>::cancel() :85 0 0.0% 0.0% boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::epoll_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint>, boost::corosio::detail::reactor_acceptor_final<boost::corosio::detail::epoll_traits, boost::corosio::tcp_acceptor::implementation, boost::corosio::endpoint>, boost::corosio::endpoint>::cancel() :85 103x 85.7% 83.0% boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::select_traits, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint>, boost::corosio::detail::reactor_acceptor_final<boost::corosio::detail::select_traits, boost::corosio::local_stream_acceptor::implementation, boost::corosio::local_endpoint>, boost::corosio::local_endpoint>::cancel() :85 0 0.0% 0.0% boost::corosio::detail::reactor_stream_base_op<boost::corosio::detail::select_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::select_traits, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint>, boost::corosio::detail::reactor_acceptor_final<boost::corosio::detail::select_traits, boost::corosio::tcp_acceptor::implementation, boost::corosio::endpoint>, boost::corosio::endpoint>::cancel() :85 93x 57.1% 50.0% boost::corosio::detail::reactor_stream_connect_op<boost::corosio::detail::epoll_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint>, boost::corosio::detail::reactor_acceptor_final<boost::corosio::detail::epoll_traits, boost::corosio::local_stream_acceptor::implementation, boost::corosio::local_endpoint>, boost::corosio::local_endpoint>::operator()() :97 2x 100.0% 100.0% boost::corosio::detail::reactor_stream_connect_op<boost::corosio::detail::epoll_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint>, boost::corosio::detail::reactor_acceptor_final<boost::corosio::detail::epoll_traits, boost::corosio::tcp_acceptor::implementation, boost::corosio::endpoint>, boost::corosio::endpoint>::operator()() :97 2968x 100.0% 100.0% boost::corosio::detail::reactor_stream_connect_op<boost::corosio::detail::select_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::select_traits, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint>, boost::corosio::detail::reactor_acceptor_final<boost::corosio::detail::select_traits, boost::corosio::local_stream_acceptor::implementation, boost::corosio::local_endpoint>, boost::corosio::local_endpoint>::operator()() :97 2x 100.0% 100.0% boost::corosio::detail::reactor_stream_connect_op<boost::corosio::detail::select_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::select_traits, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint>, boost::corosio::detail::reactor_acceptor_final<boost::corosio::detail::select_traits, boost::corosio::tcp_acceptor::implementation, boost::corosio::endpoint>, boost::corosio::endpoint>::operator()() :97 2074x 100.0% 100.0% boost::corosio::detail::reactor_stream_accept_op<boost::corosio::detail::epoll_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint>, boost::corosio::detail::reactor_acceptor_final<boost::corosio::detail::epoll_traits, boost::corosio::local_stream_acceptor::implementation, boost::corosio::local_endpoint>, boost::corosio::local_endpoint>::operator()() :104 2x 100.0% 100.0% boost::corosio::detail::reactor_stream_accept_op<boost::corosio::detail::epoll_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::epoll_traits, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint>, boost::corosio::detail::reactor_acceptor_final<boost::corosio::detail::epoll_traits, boost::corosio::tcp_acceptor::implementation, boost::corosio::endpoint>, boost::corosio::endpoint>::operator()() :104 2975x 100.0% 100.0% boost::corosio::detail::reactor_stream_accept_op<boost::corosio::detail::select_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::select_traits, boost::corosio::local_stream_socket::implementation, boost::corosio::local_endpoint>, boost::corosio::detail::reactor_acceptor_final<boost::corosio::detail::select_traits, boost::corosio::local_stream_acceptor::implementation, boost::corosio::local_endpoint>, boost::corosio::local_endpoint>::operator()() :104 2x 100.0% 100.0% boost::corosio::detail::reactor_stream_accept_op<boost::corosio::detail::select_traits, boost::corosio::detail::reactor_stream_socket_final<boost::corosio::detail::select_traits, boost::corosio::tcp_socket::implementation, boost::corosio::endpoint>, boost::corosio::detail::reactor_acceptor_final<boost::corosio::detail::select_traits, boost::corosio::tcp_acceptor::implementation, boost::corosio::endpoint>, boost::corosio::endpoint>::operator()() :104 2074x 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 // --- Deferred implementations (instantiated when Socket/Acceptor are complete) ---
75
76 template<class Traits, class Socket, class Acceptor, class Endpoint>
77 void
78 80183x reactor_stream_base_op<Traits, Socket, Acceptor, Endpoint>::operator()()
79 {
80 80183x complete_io_op(*this);
81 80183x }
82
83 template<class Traits, class Socket, class Acceptor, class Endpoint>
84 void
85 196x reactor_stream_base_op<Traits, Socket, Acceptor, Endpoint>::cancel() noexcept
86 {
87 196x if (this->socket_impl_)
88 190x this->socket_impl_->cancel_single_op(*this);
89 6x else if (this->acceptor_impl_)
90 6x this->acceptor_impl_->cancel_single_op(*this);
91 else
92 this->request_cancel();
93 196x }
94
95 template<class Traits, class Socket, class Acceptor, class Endpoint>
96 void
97 5046x reactor_stream_connect_op<Traits, Socket, Acceptor, Endpoint>::operator()()
98 {
99 5046x complete_connect_op(*this);
100 5046x }
101
102 template<class Traits, class Socket, class Acceptor, class Endpoint>
103 void
104 5053x reactor_stream_accept_op<Traits, Socket, Acceptor, Endpoint>::operator()()
105 {
106 5053x complete_accept_op<Socket>(*this);
107 5053x }
108
109 } // namespace boost::corosio::detail
110
111 #endif // BOOST_COROSIO_NATIVE_DETAIL_REACTOR_REACTOR_STREAM_OPS_HPP
112