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: 93.8 % 16 15 1
Test Date: 2026-04-09 23:21:11 Functions: 87.5 % 16 14 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                 : // --- Deferred implementations (instantiated when Socket/Acceptor are complete) ---
      75                 : 
      76                 : template<class Traits, class Socket, class Acceptor, class Endpoint>
      77                 : void
      78 HIT       81489 : reactor_stream_base_op<Traits, Socket, Acceptor, Endpoint>::operator()()
      79                 : {
      80           81489 :     complete_io_op(*this);
      81           81489 : }
      82                 : 
      83                 : template<class Traits, class Socket, class Acceptor, class Endpoint>
      84                 : void
      85             198 : reactor_stream_base_op<Traits, Socket, Acceptor, Endpoint>::cancel() noexcept
      86                 : {
      87             198 :     if (this->socket_impl_)
      88             192 :         this->socket_impl_->cancel_single_op(*this);
      89               6 :     else if (this->acceptor_impl_)
      90               6 :         this->acceptor_impl_->cancel_single_op(*this);
      91                 :     else
      92 MIS           0 :         this->request_cancel();
      93 HIT         198 : }
      94                 : 
      95                 : template<class Traits, class Socket, class Acceptor, class Endpoint>
      96                 : void
      97            8522 : reactor_stream_connect_op<Traits, Socket, Acceptor, Endpoint>::operator()()
      98                 : {
      99            8522 :     complete_connect_op(*this);
     100            8522 : }
     101                 : 
     102                 : template<class Traits, class Socket, class Acceptor, class Endpoint>
     103                 : void
     104            8530 : reactor_stream_accept_op<Traits, Socket, Acceptor, Endpoint>::operator()()
     105                 : {
     106            8530 :     complete_accept_op<Socket>(*this);
     107            8530 : }
     108                 : 
     109                 : } // namespace boost::corosio::detail
     110                 : 
     111                 : #endif // BOOST_COROSIO_NATIVE_DETAIL_REACTOR_REACTOR_STREAM_OPS_HPP
        

Generated by: LCOV version 2.3