From 4975f1e0b17cee620a58b29232867c667c24b0e3 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Thu, 5 Oct 2017 19:15:57 +0200 Subject: Simplify Task implementation --- src/server/Task.hpp | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) (limited to 'src/server/Task.hpp') diff --git a/src/server/Task.hpp b/src/server/Task.hpp index 982a6206..203627a1 100644 --- a/src/server/Task.hpp +++ b/src/server/Task.hpp @@ -17,9 +17,10 @@ #ifndef INGEN_ENGINE_TASK_HPP #define INGEN_ENGINE_TASK_HPP +#include #include #include -#include +#include #include namespace Ingen { @@ -55,6 +56,17 @@ public: , _done(task._done.load()) {} + Task& operator=(Task&& task) + { + _children = std::move(task._children); + _block = task._block; + _mode = task._mode; + _done_end = task._done_end; + _next = task._next.load(); + _done = task._done.load(); + return *this; + } + /** Run task in the given context. */ void run(RunContext& context); @@ -65,14 +77,14 @@ public: bool empty() const { return _mode != Mode::SINGLE && _children.empty(); } /** Simplify task expression. */ - static std::unique_ptr simplify(std::unique_ptr&& task); + static Task simplify(Task task); /** Steal a child task from this task (succeeds for PARALLEL only). */ Task* steal(RunContext& context); /** Prepend a child to this task. */ void push_front(Task&& task) { - _children.push_front(std::unique_ptr(new Task(std::move(task)))); + _children.emplace_front(std::move(task)); } Mode mode() const { return _mode; } @@ -82,13 +94,17 @@ public: void set_done(bool done) { _done = done; } private: - typedef std::deque> Children; + typedef std::deque Children; Task(const Task&) = delete; Task& operator=(const Task&) = delete; Task* get_task(RunContext& context); + void append(Task t) { + _children.emplace_back(std::move(t)); + } + Children _children; ///< Vector of child tasks BlockImpl* _block; ///< Used for SINGLE only Mode _mode; ///< Execution mode -- cgit v1.2.1