LCOV - code coverage report
Current view: top level - corosio/native/detail/reactor - reactor_stream_ops.hpp (source / functions) Coverage Total Hit Missed
Test: coverage_remapped.info Lines: 94.7 % 19 18 1
Test Date: 2026-09-09 02:31:18 Functions: 100.0 % 20 20

           TLA  Line data    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 HIT       81838 : reactor_stream_base_op<Traits, Socket, Acceptor, Endpoint>::operator()()
      84                 : {
      85           81838 :     complete_io_op(*this);
      86           81838 : }
      87                 : 
      88                 : template<class Traits, class Socket, class Acceptor, class Endpoint>
      89                 : void
      90             325 : reactor_stream_base_op<Traits, Socket, Acceptor, Endpoint>::cancel() noexcept
      91                 : {
      92             325 :     if (this->socket_impl_)
      93             237 :         this->socket_impl_->cancel_single_op(*this);
      94              88 :     else if (this->acceptor_impl_)
      95              88 :         this->acceptor_impl_->cancel_single_op(*this);
      96                 :     else
      97 MIS           0 :         this->request_cancel();
      98 HIT         325 : }
      99                 : 
     100                 : template<class Traits, class Socket, class Acceptor, class Endpoint>
     101                 : void
     102            4565 : reactor_stream_connect_op<Traits, Socket, Acceptor, Endpoint>::operator()()
     103                 : {
     104            4565 :     complete_connect_op(*this);
     105            4565 : }
     106                 : 
     107                 : template<class Traits, class Socket, class Acceptor, class Endpoint>
     108                 : void
     109            4611 : reactor_stream_accept_op<Traits, Socket, Acceptor, Endpoint>::operator()()
     110                 : {
     111            4611 :     complete_accept_op<Socket>(*this);
     112            4611 : }
     113                 : 
     114                 : template<class Traits, class Socket, class Acceptor, class Endpoint>
     115                 : void
     116             123 : reactor_stream_wait_op<Traits, Socket, Acceptor, Endpoint>::operator()()
     117                 : {
     118             123 :     complete_wait_op(*this);
     119             123 : }
     120                 : 
     121                 : } // namespace boost::corosio::detail
     122                 : 
     123                 : #endif // BOOST_COROSIO_NATIVE_DETAIL_REACTOR_REACTOR_STREAM_OPS_HPP
        

Generated by: LCOV version 2.3