X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Ftask.h;h=183deee40e5c8d0b6b3b60455a2e3f14e933fdb5;hb=6a166cffc39f3d2f447a9da932407eddbc51135a;hp=03d212bc74af1ac1b7eaaaaabfe8f7ec0e64aa72;hpb=b5ccba555f4985233532041c34e28d71dd58933f;p=builder.git diff --git a/source/task.h b/source/task.h index 03d212b..183deee 100644 --- a/source/task.h +++ b/source/task.h @@ -1,8 +1,15 @@ #ifndef TASK_H_ #define TASK_H_ +#include #include +#include +/** +Tasks are used to manage other programs and worker threads involved in the +build process. They are run asynchronously by default, but a wait() method is +provided should it be necessary to wait for a task to finish. +*/ class Task { public: @@ -15,13 +22,38 @@ public: sigc::signal signal_finished; + std::list files; + bool unlink; + protected: - Task() { } + Task(); public: virtual ~Task() { } + /** Associate the task with a file. */ + void add_file(const Msp::FS::Path &); + + /** If set to true, the associated files are removed before the task is + started. */ + void set_unlink(bool = true); + + /** Returns the command being executed for this task. Only makes sense if + an external command is involved. */ + virtual std::string get_command() const = 0; + + /// Starts the task. virtual void start() = 0; + +protected: + /// Ensures that the output directory exists and removes files if necessary. + void prepare(); + +public: + /// Checks the status of the task and immediately returns. virtual Status check() = 0; + + /// Waits for the task to finish and returns its final status. + virtual Status wait() = 0; }; #endif