libs/corosio/include/boost/corosio/detail/scheduler.hpp

100.0% Lines (1/1) 100.0% Functions (1/1) -% Branches (0/0)
libs/corosio/include/boost/corosio/detail/scheduler.hpp
Line Hits Source Code
1 //
2 // Copyright (c) 2025 Vinnie Falco (vinnie.falco@gmail.com)
3 // Copyright (c) 2026 Steve Gerbino
4 //
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)
7 //
8 // Official repository: https://github.com/cppalliance/corosio
9 //
10
11 #ifndef BOOST_COROSIO_DETAIL_SCHEDULER_HPP
12 #define BOOST_COROSIO_DETAIL_SCHEDULER_HPP
13
14 #include <boost/corosio/detail/config.hpp>
15 #include <coroutine>
16
17 #include <cstddef>
18
19 namespace boost::corosio::detail {
20
21 class scheduler_op;
22
23 struct scheduler
24 {
25 336 virtual ~scheduler() = default;
26 virtual void post(std::coroutine_handle<>) const = 0;
27 virtual void post(scheduler_op*) const = 0;
28
29 /** Notify scheduler of pending work (for executor use).
30 When the count reaches zero, the scheduler stops.
31 */
32 virtual void on_work_started() noexcept = 0;
33 virtual void on_work_finished() noexcept = 0;
34
35 /** Notify scheduler of pending I/O work (for services use).
36 Unlike on_work_finished, work_finished does not stop the scheduler
37 when the count reaches zero - it only wakes blocked threads.
38 */
39 virtual void work_started() const noexcept = 0;
40 virtual void work_finished() const noexcept = 0;
41
42 virtual bool running_in_this_thread() const noexcept = 0;
43 virtual void stop() = 0;
44 virtual bool stopped() const noexcept = 0;
45 virtual void restart() = 0;
46 virtual std::size_t run() = 0;
47 virtual std::size_t run_one() = 0;
48 virtual std::size_t wait_one(long usec) = 0;
49 virtual std::size_t poll() = 0;
50 virtual std::size_t poll_one() = 0;
51 };
52
53 } // namespace boost::corosio::detail
54
55 #endif
56