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 <boost/assert.hpp>
6#include <uv.h>
7
8#include <coroutine>
9#include <deque>
10
11namespace uvco {
12
15
17static constexpr bool logSchedulerOperations = false;
18
45class Scheduler {
46public:
48 Scheduler(const Scheduler &) = delete;
49 Scheduler(Scheduler &&) = delete;
50 Scheduler &operator=(const Scheduler &) = delete;
53
55 void enqueue(std::coroutine_handle<> handle);
56
57 void cancel(std::coroutine_handle<> handle);
58
60 void runAll();
61
69 std::coroutine_handle<> getNext();
70
77 void close();
78
79 [[nodiscard]] bool empty() const { return resumable_.empty(); }
80
81private:
82 std::coroutine_handle<> getNextInner();
83
84 std::deque<std::coroutine_handle<>> resumable_;
85};
86
87} // namespace uvco
static constexpr bool logSchedulerOperations
If set to true, log scheduler operations to stdout.
Definition scheduler.h:17
std::coroutine_handle getNext()
Definition scheduler.cc:57
void runAll()
Run all scheduled coroutines sequentially.
Definition scheduler.cc:21
std::coroutine_handle getNextInner()
Definition scheduler.cc:65
bool empty() const
Definition scheduler.h:79
Scheduler(Scheduler &&)=delete
void cancel(std::coroutine_handle<> handle)
Definition scheduler.cc:44
void enqueue(std::coroutine_handle<> handle)
Schedule a coroutine for resumption.
Definition scheduler.cc:34
Scheduler & operator=(const Scheduler &)=delete
Scheduler & operator=(Scheduler &&)=delete
void close()
Definition scheduler.cc:32
std::deque< std::coroutine_handle<> > resumable_
Definition scheduler.h:84
Scheduler(const Scheduler &)=delete
Definition async_work.cc:18