]> git.tdb.fi Git - builder.git/blobdiff - source/internaltask.h
Refactor InternalTask to take a functor
[builder.git] / source / internaltask.h
index 59545192a5bc82b130820d1e5b9bf05f0e94edc7..608ea9662609bb0e5912f65a247f193f3a292504 100644 (file)
@@ -1,6 +1,7 @@
 #ifndef INTERNALTASK_H_
 #define INTERNALTASK_H_
 
+#include <functional>
 #include <msp/core/thread.h>
 #include "task.h"
 
@@ -11,25 +12,28 @@ or ERROR before terminating.
 */
 class InternalTask: public Task
 {
-public:
+private:
        class Worker: public Msp::Thread
        {
                friend class InternalTask;
 
-       protected:
+       private:
+               std::function<bool()> func;
                volatile Status status = Task::RUNNING;
 
-               Worker() = default;
-
        public:
+               Worker(std::function<bool()> f): func(f) { }
+
                Status get_status() const { return status; }
+
+       private:
+               void main() override;
        };
 
-private:
-       Worker *worker;
+       Worker worker;
 
 public:
-       InternalTask(Worker *w): worker(w) { }
+       InternalTask(std::function<bool()> f): worker(f) { }
        ~InternalTask();
 
        std::string get_command() const override { return "<internal>"; }