#include "core/task.hpp" #include #include #include #include #include #include #include "debug.hpp" using namespace std; namespace flat { namespace core { task::task(task::callback f, priority_t p) : prioritized(p), m_callback(f) {} std::shared_ptr job::delegate_task(task::callback f, priority_t p) { auto shared = std::make_shared(f, p); insert(shared); npdebug("Task number: ", this->size()); return shared; } void job::add_task(task::callback f, priority_t p) { insert(std::make_shared(f, p)); } void job::invoke_tasks() { // expired tasks to remove std::vector to_erase; for (auto tp : *this) { // check that the task has not expired if (std::shared_ptr t = tp.lock()) { std::invoke(*t); } else to_erase.push_back(tp); } // delete expired tasks for (auto tp : to_erase) { erase(tp); } } } }