1  
//
1  
//
2  
// Copyright (c) 2025 Vinnie Falco (vinnie.falco@gmail.com)
2  
// Copyright (c) 2025 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_SCHEDULER_HPP
11  
#ifndef BOOST_COROSIO_DETAIL_SCHEDULER_HPP
12  
#define BOOST_COROSIO_DETAIL_SCHEDULER_HPP
12  
#define BOOST_COROSIO_DETAIL_SCHEDULER_HPP
13  

13  

14  
#include <boost/corosio/detail/config.hpp>
14  
#include <boost/corosio/detail/config.hpp>
15  
#include <coroutine>
15  
#include <coroutine>
16  

16  

17  
#include <cstddef>
17  
#include <cstddef>
18  

18  

19  
namespace boost::corosio::detail {
19  
namespace boost::corosio::detail {
20  

20  

21  
class scheduler_op;
21  
class scheduler_op;
22  

22  

23  
struct BOOST_COROSIO_DECL scheduler
23  
struct BOOST_COROSIO_DECL scheduler
24  
{
24  
{
25  
    virtual ~scheduler()                             = default;
25  
    virtual ~scheduler()                             = default;
26  
    virtual void post(std::coroutine_handle<>) const = 0;
26  
    virtual void post(std::coroutine_handle<>) const = 0;
27  
    virtual void post(scheduler_op*) const           = 0;
27  
    virtual void post(scheduler_op*) const           = 0;
28  

28  

29  
    virtual void work_started() noexcept  = 0;
29  
    virtual void work_started() noexcept  = 0;
30  
    virtual void work_finished() noexcept = 0;
30  
    virtual void work_finished() noexcept = 0;
31  

31  

32  
    virtual bool running_in_this_thread() const noexcept = 0;
32  
    virtual bool running_in_this_thread() const noexcept = 0;
33  
    virtual void stop()                                  = 0;
33  
    virtual void stop()                                  = 0;
34  
    virtual bool stopped() const noexcept                = 0;
34  
    virtual bool stopped() const noexcept                = 0;
35  
    virtual void restart()                               = 0;
35  
    virtual void restart()                               = 0;
36  
    virtual std::size_t run()                            = 0;
36  
    virtual std::size_t run()                            = 0;
37  
    virtual std::size_t run_one()                        = 0;
37  
    virtual std::size_t run_one()                        = 0;
38  
    virtual std::size_t wait_one(long usec)              = 0;
38  
    virtual std::size_t wait_one(long usec)              = 0;
39  
    virtual std::size_t poll()                           = 0;
39  
    virtual std::size_t poll()                           = 0;
40  
    virtual std::size_t poll_one()                       = 0;
40  
    virtual std::size_t poll_one()                       = 0;
41  
};
41  
};
42  

42  

43  
} // namespace boost::corosio::detail
43  
} // namespace boost::corosio::detail
44  

44  

45  
#endif
45  
#endif