// -*- c++ -*- #pragma once #include #include #include #include #include enum class State { Unknown, Ready, Running, Done, Error, }; class Task { public: Task(const std::vector& depends); int registerDepTasks(const std::list>& tasks); bool dirty(); bool ready(); int run(); State state() const; virtual int clean() = 0 ; virtual std::vector depends() const = 0; virtual std::string target() const = 0; virtual std::string toJSON() const { return {}; }; protected: std::atomic task_state{State::Unknown}; virtual int runInner() { return 0; }; virtual bool dirtyInner() { return false; } std::vector dependsStr; std::list> dependsTasks; };