include/boost/corosio/detail/op_base.hpp

100.0% Lines (22/0/22) 100.0% List of functions (118/0/118)
op_base.hpp
f(x) Functions (118)
Function Calls Lines Blocks
boost::corosio::detail::bytes_op_base<boost::corosio::io_read_stream::read_some_awaitable<boost::capy::detail::slice_of<boost::capy::mutable_buffer> > >::bytes_op_base() :39 42x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_read_stream::read_some_awaitable<boost::capy::detail::slice_of<std::array<boost::capy::mutable_buffer, 2ul> > > >::bytes_op_base() :39 1x 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 357057x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_read_stream::read_some_awaitable<std::array<boost::capy::mutable_buffer, 2ul> > >::bytes_op_base() :39 3x 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 5110x 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 355288x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<boost::capy::detail::slice_of<boost::capy::const_buffer> > >::bytes_op_base() :39 42x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<boost::capy::detail::slice_of<boost::capy::detail::slice_of<std::array<boost::capy::const_buffer, 2ul> > > > >::bytes_op_base() :39 2x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<boost::capy::detail::slice_of<boost::capy::mutable_buffer> > >::bytes_op_base() :39 4x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<std::array<boost::capy::const_buffer, 2ul> > >::bytes_op_base() :39 1x 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 70424x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<std::vector<boost::capy::const_buffer, std::allocator<boost::capy::const_buffer> > > >::bytes_op_base() :39 1x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::local_datagram_socket::recv_awaitable>::bytes_op_base() :39 140x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::local_datagram_socket::recv_from_awaitable>::bytes_op_base() :39 125x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::local_datagram_socket::send_awaitable>::bytes_op_base() :39 135x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::local_datagram_socket::send_to_awaitable>::bytes_op_base() :39 128x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::udp_socket::recv_awaitable>::bytes_op_base() :39 19x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::udp_socket::recv_from_awaitable>::bytes_op_base() :39 103x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::udp_socket::send_awaitable>::bytes_op_base() :39 20x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::udp_socket::send_to_awaitable>::bytes_op_base() :39 79x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_read_stream::read_some_awaitable<boost::capy::detail::slice_of<boost::capy::mutable_buffer> > >::await_ready() const :46 42x 100.0% 88.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_read_stream::read_some_awaitable<boost::capy::detail::slice_of<std::array<boost::capy::mutable_buffer, 2ul> > > >::await_ready() const :46 1x 100.0% 88.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_read_stream::read_some_awaitable<boost::capy::mutable_buffer> >::await_ready() const :46 357057x 100.0% 88.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_read_stream::read_some_awaitable<std::array<boost::capy::mutable_buffer, 2ul> > >::await_ready() const :46 3x 100.0% 88.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% 88.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 5110x 100.0% 88.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<boost::capy::const_buffer> >::await_ready() const :46 355288x 100.0% 88.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<boost::capy::detail::slice_of<boost::capy::const_buffer> > >::await_ready() const :46 42x 100.0% 88.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<boost::capy::detail::slice_of<boost::capy::detail::slice_of<std::array<boost::capy::const_buffer, 2ul> > > > >::await_ready() const :46 2x 100.0% 88.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<boost::capy::detail::slice_of<boost::capy::mutable_buffer> > >::await_ready() const :46 4x 100.0% 88.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<std::array<boost::capy::const_buffer, 2ul> > >::await_ready() const :46 1x 100.0% 88.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% 88.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 70424x 100.0% 88.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<std::vector<boost::capy::const_buffer, std::allocator<boost::capy::const_buffer> > > >::await_ready() const :46 1x 100.0% 88.0% boost::corosio::detail::bytes_op_base<boost::corosio::local_datagram_socket::recv_awaitable>::await_ready() const :46 140x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::local_datagram_socket::recv_from_awaitable>::await_ready() const :46 125x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::local_datagram_socket::send_awaitable>::await_ready() const :46 135x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::local_datagram_socket::send_to_awaitable>::await_ready() const :46 128x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::udp_socket::recv_awaitable>::await_ready() const :46 19x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::udp_socket::recv_from_awaitable>::await_ready() const :46 103x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::udp_socket::send_awaitable>::await_ready() const :46 20x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::udp_socket::send_to_awaitable>::await_ready() const :46 79x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_read_stream::read_some_awaitable<boost::capy::detail::slice_of<boost::capy::mutable_buffer> > >::await_resume() const :53 42x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_read_stream::read_some_awaitable<boost::capy::detail::slice_of<std::array<boost::capy::mutable_buffer, 2ul> > > >::await_resume() const :53 1x 75.0% 57.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_read_stream::read_some_awaitable<boost::capy::mutable_buffer> >::await_resume() const :53 357047x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_read_stream::read_some_awaitable<std::array<boost::capy::mutable_buffer, 2ul> > >::await_resume() const :53 3x 75.0% 57.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 :53 4x 75.0% 57.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 :53 5110x 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 :53 355288x 100.0% 86.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<boost::capy::detail::slice_of<boost::capy::const_buffer> > >::await_resume() const :53 42x 75.0% 57.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<boost::capy::detail::slice_of<boost::capy::detail::slice_of<std::array<boost::capy::const_buffer, 2ul> > > > >::await_resume() const :53 2x 75.0% 57.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<boost::capy::detail::slice_of<boost::capy::mutable_buffer> > >::await_resume() const :53 4x 75.0% 57.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<std::array<boost::capy::const_buffer, 2ul> > >::await_resume() const :53 1x 75.0% 57.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 :53 4x 75.0% 57.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 :53 70424x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<std::vector<boost::capy::const_buffer, std::allocator<boost::capy::const_buffer> > > >::await_resume() const :53 1x 75.0% 57.0% boost::corosio::detail::bytes_op_base<boost::corosio::local_datagram_socket::recv_awaitable>::await_resume() const :53 138x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::local_datagram_socket::recv_from_awaitable>::await_resume() const :53 125x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::local_datagram_socket::send_awaitable>::await_resume() const :53 135x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::local_datagram_socket::send_to_awaitable>::await_resume() const :53 128x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::udp_socket::recv_awaitable>::await_resume() const :53 19x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::udp_socket::recv_from_awaitable>::await_resume() const :53 101x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::udp_socket::send_awaitable>::await_resume() const :53 20x 100.0% 86.0% boost::corosio::detail::bytes_op_base<boost::corosio::udp_socket::send_to_awaitable>::await_resume() const :53 79x 100.0% 86.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_read_stream::read_some_awaitable<boost::capy::detail::slice_of<boost::capy::mutable_buffer> > >::await_suspend(std::__n4861::coroutine_handle<void>, boost::capy::io_env const*) :60 42x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_read_stream::read_some_awaitable<boost::capy::detail::slice_of<std::array<boost::capy::mutable_buffer, 2ul> > > >::await_suspend(std::__n4861::coroutine_handle<void>, boost::capy::io_env const*) :60 1x 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*) :60 357024x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_read_stream::read_some_awaitable<std::array<boost::capy::mutable_buffer, 2ul> > >::await_suspend(std::__n4861::coroutine_handle<void>, boost::capy::io_env const*) :60 3x 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*) :60 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*) :60 5110x 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*) :60 355252x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<boost::capy::detail::slice_of<boost::capy::const_buffer> > >::await_suspend(std::__n4861::coroutine_handle<void>, boost::capy::io_env const*) :60 42x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<boost::capy::detail::slice_of<boost::capy::detail::slice_of<std::array<boost::capy::const_buffer, 2ul> > > > >::await_suspend(std::__n4861::coroutine_handle<void>, boost::capy::io_env const*) :60 2x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<boost::capy::detail::slice_of<boost::capy::mutable_buffer> > >::await_suspend(std::__n4861::coroutine_handle<void>, boost::capy::io_env const*) :60 4x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<std::array<boost::capy::const_buffer, 2ul> > >::await_suspend(std::__n4861::coroutine_handle<void>, boost::capy::io_env const*) :60 1x 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*) :60 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*) :60 70424x 100.0% 100.0% boost::corosio::detail::bytes_op_base<boost::corosio::io_write_stream::write_some_awaitable<std::vector<boost::capy::const_buffer, std::allocator<boost::capy::const_buffer> > > >::await_suspend(std::__n4861::coroutine_handle<void>, boost::capy::io_env const*) :60 1x 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*) :60 110x 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*) :60 107x 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*) :60 114x 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*) :60 113x 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*) :60 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*) :60 97x 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*) :60 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*) :60 73x 100.0% 100.0% boost::corosio::detail::void_op_base<boost::corosio::local_datagram_socket::wait_awaitable>::void_op_base() :84 16x 100.0% 100.0% boost::corosio::detail::void_op_base<boost::corosio::local_stream_acceptor::wait_awaitable>::void_op_base() :84 12x 100.0% 100.0% boost::corosio::detail::void_op_base<boost::corosio::local_stream_socket::connect_awaitable>::void_op_base() :84 31x 100.0% 100.0% boost::corosio::detail::void_op_base<boost::corosio::local_stream_socket::wait_awaitable>::void_op_base() :84 16x 100.0% 100.0% boost::corosio::detail::void_op_base<boost::corosio::tcp_acceptor::wait_awaitable>::void_op_base() :84 25x 100.0% 100.0% boost::corosio::detail::void_op_base<boost::corosio::tcp_socket::connect_awaitable>::void_op_base() :84 10124x 100.0% 100.0% boost::corosio::detail::void_op_base<boost::corosio::tcp_socket::wait_awaitable>::void_op_base() :84 48x 100.0% 100.0% boost::corosio::detail::void_op_base<boost::corosio::udp_socket::connect_awaitable>::void_op_base() :84 36x 100.0% 100.0% boost::corosio::detail::void_op_base<boost::corosio::udp_socket::wait_awaitable>::void_op_base() :84 32x 100.0% 100.0% boost::corosio::detail::void_op_base<boost::corosio::local_datagram_socket::wait_awaitable>::await_ready() const :90 16x 100.0% 88.0% boost::corosio::detail::void_op_base<boost::corosio::local_stream_acceptor::wait_awaitable>::await_ready() const :90 12x 100.0% 100.0% boost::corosio::detail::void_op_base<boost::corosio::local_stream_socket::connect_awaitable>::await_ready() const :90 31x 100.0% 88.0% boost::corosio::detail::void_op_base<boost::corosio::local_stream_socket::wait_awaitable>::await_ready() const :90 16x 100.0% 88.0% boost::corosio::detail::void_op_base<boost::corosio::tcp_acceptor::wait_awaitable>::await_ready() const :90 25x 100.0% 100.0% boost::corosio::detail::void_op_base<boost::corosio::tcp_socket::connect_awaitable>::await_ready() const :90 10124x 100.0% 88.0% boost::corosio::detail::void_op_base<boost::corosio::tcp_socket::wait_awaitable>::await_ready() const :90 48x 100.0% 88.0% boost::corosio::detail::void_op_base<boost::corosio::udp_socket::connect_awaitable>::await_ready() const :90 36x 100.0% 88.0% boost::corosio::detail::void_op_base<boost::corosio::udp_socket::wait_awaitable>::await_ready() const :90 32x 100.0% 88.0% boost::corosio::detail::void_op_base<boost::corosio::local_datagram_socket::wait_awaitable>::await_resume() const :97 16x 100.0% 86.0% boost::corosio::detail::void_op_base<boost::corosio::local_stream_acceptor::wait_awaitable>::await_resume() const :97 12x 75.0% 57.0% boost::corosio::detail::void_op_base<boost::corosio::local_stream_socket::connect_awaitable>::await_resume() const :97 31x 100.0% 86.0% boost::corosio::detail::void_op_base<boost::corosio::local_stream_socket::wait_awaitable>::await_resume() const :97 16x 100.0% 86.0% boost::corosio::detail::void_op_base<boost::corosio::tcp_acceptor::wait_awaitable>::await_resume() const :97 25x 100.0% 100.0% boost::corosio::detail::void_op_base<boost::corosio::tcp_socket::connect_awaitable>::await_resume() const :97 10124x 100.0% 100.0% boost::corosio::detail::void_op_base<boost::corosio::tcp_socket::wait_awaitable>::await_resume() const :97 48x 100.0% 100.0% boost::corosio::detail::void_op_base<boost::corosio::udp_socket::connect_awaitable>::await_resume() const :97 36x 100.0% 100.0% boost::corosio::detail::void_op_base<boost::corosio::udp_socket::wait_awaitable>::await_resume() const :97 32x 100.0% 86.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*) :104 4x 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*) :104 10011x 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*) :104 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 788732x 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 788732x bool await_ready() const noexcept
47 {
48 // A pre-set ec_ means the initiator failed before dispatch
49 // (e.g. a closed object); complete immediately with that error.
50 788732x return static_cast<bool>(ec_) || token_.stop_requested();
51 }
52
53 788718x [[nodiscard]] capy::io_result<std::size_t> await_resume() const noexcept
54 {
55 788718x if (token_.stop_requested())
56 1391x return {make_error_code(std::errc::operation_canceled), 0};
57 787327x return {ec_, bytes_};
58 }
59
60 788708x auto await_suspend(std::coroutine_handle<> h, capy::io_env const* env)
61 -> std::coroutine_handle<>
62 {
63 788708x token_ = env->stop_token;
64 788708x return static_cast<Derived const*>(this)->dispatch(
65 788708x h, env->executor);
66 }
67 };
68
69 /* CRTP base for awaitables that return io_result<>.
70
71 Derived classes must provide:
72
73 std::coroutine_handle<> dispatch(
74 std::coroutine_handle<> h,
75 capy::executor_ref ex) const;
76
77 which forwards to the backend implementation method, passing
78 token_ and &ec_ as the cancellation/output parameters.
79 */
80 template<class Derived>
81 class void_op_base
82 {
83 friend Derived;
84 10340x void_op_base() = default;
85
86 public:
87 std::stop_token token_;
88 mutable std::error_code ec_;
89
90 10340x bool await_ready() const noexcept
91 {
92 // A pre-set ec_ means the initiator failed before dispatch
93 // (e.g. auto-open); complete immediately with that error.
94 10340x return static_cast<bool>(ec_) || token_.stop_requested();
95 }
96
97 10340x [[nodiscard]] capy::io_result<> await_resume() const noexcept
98 {
99 10340x if (token_.stop_requested())
100 44x return {make_error_code(std::errc::operation_canceled)};
101 10296x return {ec_};
102 }
103
104 10334x auto await_suspend(std::coroutine_handle<> h, capy::io_env const* env)
105 -> std::coroutine_handle<>
106 {
107 10334x token_ = env->stop_token;
108 10334x return static_cast<Derived const*>(this)->dispatch(
109 10334x h, env->executor);
110 }
111 };
112
113 } // namespace boost::corosio::detail
114
115 #endif // BOOST_COROSIO_DETAIL_OP_BASE_HPP
116