uvco 0.1
Loading...
Searching...
No Matches
scheduler.h
Go to the documentation of this file.
1// uvco (c) 2023 Lewin Bormann. See LICENSE for specific terms.
2
3#pragma once
4
5#include <array>
6#include <boost/assert.hpp>
7#include <uv.h>
8
9#include <coroutine>
10#include <vector>
11
12namespace uvco {
13
16
43class Scheduler {
44public:
45 enum class RunMode {
48 Immediate = 0,
51 Deferred = 1,
52 };
53
63 explicit Scheduler(RunMode mode = RunMode::Deferred);
64
65 Scheduler(const Scheduler &) = delete;
66 Scheduler(Scheduler &&) = delete;
67 Scheduler &operator=(const Scheduler &) = delete;
70
73 void setUpLoop(uv_loop_t *loop);
74
76 void enqueue(std::coroutine_handle<> handle);
77
79 void runAll();
80
87 void close();
88
89 [[nodiscard]] bool empty() const { return resumableActive_.empty(); }
90
91private:
92 // Vector of coroutine handles to be resumed.
93 std::vector<std::coroutine_handle<>> resumableActive_;
94 // Vector of coroutines currently being resumed (while in runAll()).
95 std::vector<std::coroutine_handle<>> resumableRunning_;
96
98};
99
100} // namespace uvco
Definition scheduler.h:43
void setUpLoop(uv_loop_t *loop)
Definition scheduler.cc:72
std::vector< std::coroutine_handle<> > resumableActive_
Definition scheduler.h:93
RunMode run_mode_
Definition scheduler.h:97
void runAll()
Run all scheduled coroutines sequentially.
Definition scheduler.cc:27
bool empty() const
Definition scheduler.h:89
Scheduler(Scheduler &&)=delete
void enqueue(std::coroutine_handle<> handle)
Schedule a coroutine for resumption.
Definition scheduler.cc:60
Scheduler & operator=(const Scheduler &)=delete
Scheduler & operator=(Scheduler &&)=delete
void close()
Definition scheduler.cc:58
RunMode
Definition scheduler.h:45
std::vector< std::coroutine_handle<> > resumableRunning_
Definition scheduler.h:95
Scheduler(RunMode mode=RunMode::Deferred)
Definition scheduler.cc:76
Scheduler(const Scheduler &)=delete
Definition async_work.cc:17