100.00% Lines (4/4) 100.00% Functions (1/1)
TLA Baseline Branch
Line Hits Code Line Hits Code
1   // 1   //
2   // Copyright (c) 2026 Vinnie Falco (vinnie.falco@gmail.com) 2   // Copyright (c) 2026 Vinnie Falco (vinnie.falco@gmail.com)
3   // Copyright (c) 2026 Steve Gerbino 3   // Copyright (c) 2026 Steve Gerbino
4   // 4   //
5   // Distributed under the Boost Software License, Version 1.0. (See accompanying 5   // Distributed under the Boost Software License, Version 1.0. (See accompanying
6   // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 6   // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7   // 7   //
8   // Official repository: https://github.com/cppalliance/corosio 8   // Official repository: https://github.com/cppalliance/corosio
9   // 9   //
10   10  
11   #ifndef BOOST_COROSIO_DETAIL_DISPATCH_CORO_HPP 11   #ifndef BOOST_COROSIO_DETAIL_DISPATCH_CORO_HPP
12   #define BOOST_COROSIO_DETAIL_DISPATCH_CORO_HPP 12   #define BOOST_COROSIO_DETAIL_DISPATCH_CORO_HPP
13   13  
14   #include <boost/corosio/io_context.hpp> 14   #include <boost/corosio/io_context.hpp>
15   #include <boost/capy/continuation.hpp> 15   #include <boost/capy/continuation.hpp>
16   #include <boost/capy/ex/executor_ref.hpp> 16   #include <boost/capy/ex/executor_ref.hpp>
17   #include <boost/capy/detail/type_id.hpp> 17   #include <boost/capy/detail/type_id.hpp>
18   #include <coroutine> 18   #include <coroutine>
19   19  
20   namespace boost::corosio::detail { 20   namespace boost::corosio::detail {
21   21  
22   /** Returns a handle for symmetric transfer on I/O completion. 22   /** Returns a handle for symmetric transfer on I/O completion.
23   23  
24   If the executor is io_context::executor_type, returns `c.h` 24   If the executor is io_context::executor_type, returns `c.h`
25   directly (fast path). Otherwise dispatches through the 25   directly (fast path). Otherwise dispatches through the
26   executor, which returns `c.h` or `noop_coroutine()`. 26   executor, which returns `c.h` or `noop_coroutine()`.
27   27  
28   Callers in coroutine machinery should return the result 28   Callers in coroutine machinery should return the result
29   for symmetric transfer. Callers at the scheduler pump 29   for symmetric transfer. Callers at the scheduler pump
30   level should call `.resume()` on the result. 30   level should call `.resume()` on the result.
31   31  
32   @param ex The executor to dispatch through. 32   @param ex The executor to dispatch through.
33   @param c The continuation to dispatch. Must remain at a 33   @param c The continuation to dispatch. Must remain at a
34   stable address until dequeued by the executor. 34   stable address until dequeued by the executor.
35   35  
36   @return A handle for symmetric transfer or `std::noop_coroutine()`. 36   @return A handle for symmetric transfer or `std::noop_coroutine()`.
37   */ 37   */
38   inline std::coroutine_handle<> 38   inline std::coroutine_handle<>
HITCBC 39   715997 dispatch_coro(capy::executor_ref ex, capy::continuation& c) 39   405615 dispatch_coro(capy::executor_ref ex, capy::continuation& c)
40   { 40   {
HITCBC 41   715997 if (ex.target<io_context::executor_type>() != nullptr) 41   405615 if (ex.target<io_context::executor_type>() != nullptr)
HITCBC 42   715988 return c.h; 42   405606 return c.h;
HITCBC 43   9 return ex.dispatch(c); 43   9 return ex.dispatch(c);
44   } 44   }
45   45  
46   } // namespace boost::corosio::detail 46   } // namespace boost::corosio::detail
47   47  
48   #endif 48   #endif