From 80290e7d65dc498e9ea5e64aa6cbc65282072deb Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Fri, 18 Jun 2021 07:27:57 +0200 Subject: New dependency system. --- task.cc | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) (limited to 'task.cc') diff --git a/task.cc b/task.cc index e69de29..d539b50 100644 --- a/task.cc +++ b/task.cc @@ -0,0 +1,70 @@ +#include "task.h" + +#include +#include + +Task::Task(const std::vector& depends) + : dependsStr(depends) +{ +} + +void Task::registerDepTasks(const std::list>& tasks) +{ + for(auto const& depStr : dependsStr) + { + for(const auto& task : tasks) + { + if(task->target() == depStr) + { + dependsTasks.push_back(task); + } + } + } +} + +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->done()) + { + return false; + } + } + + return true; +} + +int Task::run() +{ + if(is_done.load()) + { + return 0; + } + + auto ret = runInner(); + if(ret == 0) + { + is_done.store(true); + } + + return ret; +} + +bool Task::done() const +{ + return is_done.load(); +} -- cgit v1.2.3