include/boost/corosio/detail/op_base.hpp

100.0% Lines (22/22) 100.0% List of functions (95/95)
op_base.hpp
f(x) Functions (95)
Function Calls Lines Blocks
boost::corosio::detail::bytes_op_base<boost::corosio::io_read_stream::read_some_awaitable<boost::capy::detail::slice_impl<boost::capy::mutable_buffer>::data_view> >::bytes_op_base() :39 21x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_read_stream::read_some_awaitable<boost::capy::mutable_buffer> >::bytes_op_base() :39 470649x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_read_stream::read_some_awaitable<std::array<boost::capy::mutable_buffer, 3ul> > >::bytes_op_base() :39 4x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_read_stream::read_some_awaitable<std::span<boost::capy::mutable_buffer const, 18446744073709551615ul> > >::bytes_op_base() :39 4074x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<boost::capy::const_buffer> >::bytes_op_base() :39 469306x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<boost::capy::detail::slice_impl<boost::capy::const_buffer>::data_view> >::bytes_op_base() :39 21x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<boost::capy::detail::slice_impl<boost::capy::mutable_buffer>::data_view> >::bytes_op_base() :39 3x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<std::array<boost::capy::const_buffer, 3ul> > >::bytes_op_base() :39 4x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<std::span<boost::capy::const_buffer const, 18446744073709551615ul> > >::bytes_op_base() :39 73009x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::local_datagram_socket::recv_awaitable>::bytes_op_base() :39 130x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::local_datagram_socket::recv_from_awaitable>::bytes_op_base() :39 120x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::local_datagram_socket::send_awaitable>::bytes_op_base() :39 131x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::local_datagram_socket::send_to_awaitable>::bytes_op_base() :39 123x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::udp_socket::recv_awaitable>::bytes_op_base() :39 16x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::udp_socket::recv_from_awaitable>::bytes_op_base() :39 63x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::udp_socket::send_awaitable>::bytes_op_base() :39 17x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::udp_socket::send_to_awaitable>::bytes_op_base() :39 47x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_read_stream::read_some_awaitable<boost::capy::detail::slice_impl<boost::capy::mutable_buffer>::data_view> >::await_ready() const :46 21x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_read_stream::read_some_awaitable<boost::capy::mutable_buffer> >::await_ready() const :46 470649x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_read_stream::read_some_awaitable<std::array<boost::capy::mutable_buffer, 3ul> > >::await_ready() const :46 4x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_read_stream::read_some_awaitable<std::span<boost::capy::mutable_buffer const, 18446744073709551615ul> > >::await_ready() const :46 4074x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<boost::capy::const_buffer> >::await_ready() const :46 469306x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<boost::capy::detail::slice_impl<boost::capy::const_buffer>::data_view> >::await_ready() const :46 21x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<boost::capy::detail::slice_impl<boost::capy::mutable_buffer>::data_view> >::await_ready() const :46 3x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<std::array<boost::capy::const_buffer, 3ul> > >::await_ready() const :46 4x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<std::span<boost::capy::const_buffer const, 18446744073709551615ul> > >::await_ready() const :46 73009x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::local_datagram_socket::recv_awaitable>::await_ready() const :46 130x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::local_datagram_socket::recv_from_awaitable>::await_ready() const :46 120x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::local_datagram_socket::send_awaitable>::await_ready() const :46 131x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::local_datagram_socket::send_to_awaitable>::await_ready() const :46 123x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::udp_socket::recv_awaitable>::await_ready() const :46 16x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::udp_socket::recv_from_awaitable>::await_ready() const :46 63x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::udp_socket::send_awaitable>::await_ready() const :46 17x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::udp_socket::send_to_awaitable>::await_ready() const :46 47x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_read_stream::read_some_awaitable<boost::capy::detail::slice_impl<boost::capy::mutable_buffer>::data_view> >::await_resume() const :51 21x 75.0% 67.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_read_stream::read_some_awaitable<boost::capy::mutable_buffer> >::await_resume() const :51 470645x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_read_stream::read_some_awaitable<std::array<boost::capy::mutable_buffer, 3ul> > >::await_resume() const :51 4x 75.0% 67.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_read_stream::read_some_awaitable<std::span<boost::capy::mutable_buffer const, 18446744073709551615ul> > >::await_resume() const :51 4074x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<boost::capy::const_buffer> >::await_resume() const :51 469306x 100.0% 83.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<boost::capy::detail::slice_impl<boost::capy::const_buffer>::data_view> >::await_resume() const :51 21x 75.0% 67.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<boost::capy::detail::slice_impl<boost::capy::mutable_buffer>::data_view> >::await_resume() const :51 3x 75.0% 67.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<std::array<boost::capy::const_buffer, 3ul> > >::await_resume() const :51 4x 75.0% 67.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<std::span<boost::capy::const_buffer const, 18446744073709551615ul> > >::await_resume() const :51 73009x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::local_datagram_socket::recv_awaitable>::await_resume() const :51 128x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::local_datagram_socket::recv_from_awaitable>::await_resume() const :51 120x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::local_datagram_socket::send_awaitable>::await_resume() const :51 131x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::local_datagram_socket::send_to_awaitable>::await_resume() const :51 123x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::udp_socket::recv_awaitable>::await_resume() const :51 16x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::udp_socket::recv_from_awaitable>::await_resume() const :51 61x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::udp_socket::send_awaitable>::await_resume() const :51 17x 100.0% 83.0% boost::corosio::detail::bytes_op_base<boost::corosio::udp_socket::send_to_awaitable>::await_resume() const :51 47x 100.0% 83.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_read_stream::read_some_awaitable<boost::capy::detail::slice_impl<boost::capy::mutable_buffer>::data_view> >::await_suspend(std::__n4861::coroutine_handle<void>, boost::capy::io_env const*) :58 21x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_read_stream::read_some_awaitable<boost::capy::mutable_buffer> >::await_suspend(std::__n4861::coroutine_handle<void>, boost::capy::io_env const*) :58 470625x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_read_stream::read_some_awaitable<std::array<boost::capy::mutable_buffer, 3ul> > >::await_suspend(std::__n4861::coroutine_handle<void>, boost::capy::io_env const*) :58 4x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_read_stream::read_some_awaitable<std::span<boost::capy::mutable_buffer const, 18446744073709551615ul> > >::await_suspend(std::__n4861::coroutine_handle<void>, boost::capy::io_env const*) :58 4074x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<boost::capy::const_buffer> >::await_suspend(std::__n4861::coroutine_handle<void>, boost::capy::io_env const*) :58 469279x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<boost::capy::detail::slice_impl<boost::capy::const_buffer>::data_view> >::await_suspend(std::__n4861::coroutine_handle<void>, boost::capy::io_env const*) :58 21x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<boost::capy::detail::slice_impl<boost::capy::mutable_buffer>::data_view> >::await_suspend(std::__n4861::coroutine_handle<void>, boost::capy::io_env const*) :58 3x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<std::array<boost::capy::const_buffer, 3ul> > >::await_suspend(std::__n4861::coroutine_handle<void>, boost::capy::io_env const*) :58 4x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<std::span<boost::capy::const_buffer const, 18446744073709551615ul> > >::await_suspend(std::__n4861::coroutine_handle<void>, boost::capy::io_env const*) :58 73009x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::local_datagram_socket::recv_awaitable>::await_suspend(std::__n4861::coroutine_handle<void>, boost::capy::io_env const*) :58 109x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::local_datagram_socket::recv_from_awaitable>::await_suspend(std::__n4861::coroutine_handle<void>, boost::capy::io_env const*) :58 105x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::local_datagram_socket::send_awaitable>::await_suspend(std::__n4861::coroutine_handle<void>, boost::capy::io_env const*) :58 113x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::local_datagram_socket::send_to_awaitable>::await_suspend(std::__n4861::coroutine_handle<void>, boost::capy::io_env const*) :58 111x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::udp_socket::recv_awaitable>::await_suspend(std::__n4861::coroutine_handle<void>, boost::capy::io_env const*) :58 16x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::udp_socket::recv_from_awaitable>::await_suspend(std::__n4861::coroutine_handle<void>, boost::capy::io_env const*) :58 60x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::udp_socket::send_awaitable>::await_suspend(std::__n4861::coroutine_handle<void>, boost::capy::io_env const*) :58 17x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::udp_socket::send_to_awaitable>::await_suspend(std::__n4861::coroutine_handle<void>, boost::capy::io_env const*) :58 44x 100.0% 100.0% boost::corosio::detail::void_op_base<boost::corosio::local_datagram_socket::wait_awaitable>::void_op_base() :82 13x 100.0% 100.0% boost::corosio::detail::void_op_base<boost::corosio::local_stream_socket::connect_awaitable>::void_op_base() :82 21x 100.0% 100.0% boost::corosio::detail::void_op_base<boost::corosio::local_stream_socket::wait_awaitable>::void_op_base() :82 10x 100.0% 100.0% boost::corosio::detail::void_op_base<boost::corosio::tcp_acceptor::wait_awaitable>::void_op_base() :82 9x 100.0% 100.0% boost::corosio::detail::void_op_base<boost::corosio::tcp_socket::connect_awaitable>::void_op_base() :82 14478x 100.0% 100.0% boost::corosio::detail::void_op_base<boost::corosio::tcp_socket::wait_awaitable>::void_op_base() :82 22x 100.0% 100.0% boost::corosio::detail::void_op_base<boost::corosio::udp_socket::connect_awaitable>::void_op_base() :82 36x 100.0% 100.0% boost::corosio::detail::void_op_base<boost::corosio::udp_socket::wait_awaitable>::void_op_base() :82 21x 100.0% 100.0% boost::corosio::detail::void_op_base<boost::corosio::local_datagram_socket::wait_awaitable>::await_ready() const :88 13x 100.0% 100.0% boost::corosio::detail::void_op_base<boost::corosio::local_stream_socket::connect_awaitable>::await_ready() const :88 21x 100.0% 100.0% boost::corosio::detail::void_op_base<boost::corosio::local_stream_socket::wait_awaitable>::await_ready() const :88 10x 100.0% 100.0% boost::corosio::detail::void_op_base<boost::corosio::tcp_acceptor::wait_awaitable>::await_ready() const :88 9x 100.0% 100.0% boost::corosio::detail::void_op_base<boost::corosio::tcp_socket::connect_awaitable>::await_ready() const :88 14478x 100.0% 100.0% boost::corosio::detail::void_op_base<boost::corosio::tcp_socket::wait_awaitable>::await_ready() const :88 22x 100.0% 100.0% boost::corosio::detail::void_op_base<boost::corosio::udp_socket::connect_awaitable>::await_ready() const :88 36x 100.0% 100.0% boost::corosio::detail::void_op_base<boost::corosio::udp_socket::wait_awaitable>::await_ready() const :88 21x 100.0% 100.0% boost::corosio::detail::void_op_base<boost::corosio::local_datagram_socket::wait_awaitable>::await_resume() const :93 13x 100.0% 83.0% boost::corosio::detail::void_op_base<boost::corosio::local_stream_socket::connect_awaitable>::await_resume() const :93 21x 100.0% 83.0% boost::corosio::detail::void_op_base<boost::corosio::local_stream_socket::wait_awaitable>::await_resume() const :93 10x 100.0% 83.0% boost::corosio::detail::void_op_base<boost::corosio::tcp_acceptor::wait_awaitable>::await_resume() const :93 9x 100.0% 100.0% boost::corosio::detail::void_op_base<boost::corosio::tcp_socket::connect_awaitable>::await_resume() const :93 14478x 100.0% 100.0% boost::corosio::detail::void_op_base<boost::corosio::tcp_socket::wait_awaitable>::await_resume() const :93 22x 100.0% 100.0% boost::corosio::detail::void_op_base<boost::corosio::udp_socket::connect_awaitable>::await_resume() const :93 36x 100.0% 100.0% boost::corosio::detail::void_op_base<boost::corosio::udp_socket::wait_awaitable>::await_resume() const :93 21x 100.0% 83.0% boost::corosio::detail::void_op_base<boost::corosio::local_stream_socket::connect_awaitable>::await_suspend(std::__n4861::coroutine_handle<void>, boost::capy::io_env const*) :100 15x 100.0% 100.0% boost::corosio::detail::void_op_base<boost::corosio::tcp_socket::connect_awaitable>::await_suspend(std::__n4861::coroutine_handle<void>, boost::capy::io_env const*) :100 14428x 100.0% 100.0% boost::corosio::detail::void_op_base<boost::corosio::udp_socket::connect_awaitable>::await_suspend(std::__n4861::coroutine_handle<void>, boost::capy::io_env const*) :100 18x 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_DETAIL_OP_BASE_HPP
11 #define BOOST_COROSIO_DETAIL_OP_BASE_HPP
12
13 #include <boost/capy/io_result.hpp>
14 #include <boost/capy/ex/executor_ref.hpp>
15 #include <boost/capy/ex/io_env.hpp>
16
17 #include <coroutine>
18 #include <cstddef>
19 #include <stop_token>
20 #include <system_error>
21
22 namespace boost::corosio::detail {
23
24 /* CRTP base for awaitables that return io_result<std::size_t>.
25
26 Derived classes must provide:
27
28 std::coroutine_handle<> dispatch(
29 std::coroutine_handle<> h,
30 capy::executor_ref ex) const;
31
32 which forwards to the backend implementation method, passing
33 token_, &ec_, and &bytes_ as the cancellation/output parameters.
34 */
35 template<class Derived>
36 class bytes_op_base
37 {
38 friend Derived;
39 1017738x bytes_op_base() = default;
40
41 public:
42 std::stop_token token_;
43 mutable std::error_code ec_;
44 mutable std::size_t bytes_ = 0;
45
46 1017738x bool await_ready() const noexcept
47 {
48 1017738x return token_.stop_requested();
49 }
50
51 1017730x capy::io_result<std::size_t> await_resume() const noexcept
52 {
53 1017730x if (token_.stop_requested())
54 1049x return {make_error_code(std::errc::operation_canceled), 0};
55 1016681x return {ec_, bytes_};
56 }
57
58 1017738x auto await_suspend(std::coroutine_handle<> h, capy::io_env const* env)
59 -> std::coroutine_handle<>
60 {
61 1017738x token_ = env->stop_token;
62 1017738x return static_cast<Derived const*>(this)->dispatch(
63 1017738x h, env->executor);
64 }
65 };
66
67 /* CRTP base for awaitables that return io_result<>.
68
69 Derived classes must provide:
70
71 std::coroutine_handle<> dispatch(
72 std::coroutine_handle<> h,
73 capy::executor_ref ex) const;
74
75 which forwards to the backend implementation method, passing
76 token_ and &ec_ as the cancellation/output parameters.
77 */
78 template<class Derived>
79 class void_op_base
80 {
81 friend Derived;
82 14610x void_op_base() = default;
83
84 public:
85 std::stop_token token_;
86 mutable std::error_code ec_;
87
88 14610x bool await_ready() const noexcept
89 {
90 14610x return token_.stop_requested();
91 }
92
93 14610x capy::io_result<> await_resume() const noexcept
94 {
95 14610x if (token_.stop_requested())
96 39x return {make_error_code(std::errc::operation_canceled)};
97 14571x return {ec_};
98 }
99
100 14610x auto await_suspend(std::coroutine_handle<> h, capy::io_env const* env)
101 -> std::coroutine_handle<>
102 {
103 14610x token_ = env->stop_token;
104 14610x return static_cast<Derived const*>(this)->dispatch(
105 14610x h, env->executor);
106 }
107 };
108
109 } // namespace boost::corosio::detail
110
111 #endif // BOOST_COROSIO_DETAIL_OP_BASE_HPP
112