#include "task.h" #include #include Task::Task(const std::vector& depends) : dependsStr(depends) { } int Task::registerDepTasks(const std::list>& tasks) { for(auto const& depStr : dependsStr) { bool found{false}; for(const auto& task : tasks) { if(task->target() == depStr) { dependsTasks.push_back(task); found = true; } } if(!found) { std::cerr << "Could not find dependency " << depStr << " needed by " << target() << " target\n"; return 1; } } return 0; } bool Task::dirty() { for(const auto& task : dependsTasks) { if(task->dirty()) { return true; } } return dirtyInner(); } bool Task::ready() { for(const auto& task : dependsTasks) { if(task->dirty() || task->state() == State::Running) { return false; } } task_state.store(State::Ready); return true; } int Task::run() { if(task_state.load() == State::Done) { return 0; } task_state.store(State::Running); auto ret = runInner(); if(ret == 0) { task_state.store(State::Done); } else { task_state.store(State::Error); } return ret; } State Task::state() const { return task_state.load(); }