Dispatch Queue
Dispatch Queue / Thread Pool implementation for C++11 with built-in C++20 coroutine support
 
Loading...
Searching...
No Matches
pending_task_queue.cpp
1#include "../include/pending_task_queue.hpp"
2
3namespace dispatch_queue {
4
5namespace detail {
6
7bool pending_task_queue::empty() const {
8 return background_tasks.empty();
9}
10
11size_t pending_task_queue::size() const {
12 return background_tasks.size();
13}
14
15void pending_task_queue::clear() {
16 background_tasks.clear();
17}
18
19void pending_task_queue::push(pending_task&& task, bool run_on_main_loop) {
20 if (run_on_main_loop) {
21 main_loop_tasks.push_back(std::move(task));
22 }
23 else {
24 background_tasks.push_back(std::move(task));
25 }
26}
27
28bool pending_task_queue::try_pop(pending_task& task) {
29 if (!background_tasks.empty()) {
30 task = std::move(background_tasks.front());
31 background_tasks.pop_front();
32 return true;
33 }
34 else {
35 task = {};
36 return false;
37 }
38}
39
40std::deque<pending_task> pending_task_queue::pop_main_loop_tasks() {
41 std::deque<pending_task> result;
42 main_loop_tasks.swap(result);
43 return result;
44}
45
46} // end namespace detail
47
48} // end namespace dispatch_queue