summaryrefslogtreecommitdiffstats
path: root/engine/include/core/task.hpp
blob: 90e3d972ed3682c92be46215d3607b88f40b449c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#pragma once

#include "priority.hpp"

#include <functional>
#include <set>

namespace flat {
    namespace core {
        class task : public prioritized {
        public:
            task() = delete;
            task(std::function<void()> callback, priority_t p = priority_t::none);

            inline void operator()() const { m_callback(); }

        private:
            std::function<void()> m_callback;
        };

        struct job : public queue<task> {
            inline auto add_task(task t) {
                this->insert(t);
            }

            void invoke_tasks();
        };
    }
}