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-05-20 17:06:58 Functions: 90.0 % 20 18 2

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

Generated by: LCOV version 2.3