summaryrefslogtreecommitdiffstats
path: root/src/server/Task.hpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2017-12-18 11:27:42 +0100
committerDavid Robillard <d@drobilla.net>2017-12-18 11:27:42 +0100
commita9d93e31925c8374c6e3a9bb14da7c0153d9edb9 (patch)
tree15e02bcaeb6b8c0979a91331dd08c0999fd0ce16 /src/server/Task.hpp
parent4324e6b427b3ed93b6dd74bde0be49b9508b678e (diff)
downloadingen-a9d93e31925c8374c6e3a9bb14da7c0153d9edb9.tar.gz
ingen-a9d93e31925c8374c6e3a9bb14da7c0153d9edb9.tar.bz2
ingen-a9d93e31925c8374c6e3a9bb14da7c0153d9edb9.zip
Fix recursive type issues with some toolchains
Diffstat (limited to 'src/server/Task.hpp')
-rw-r--r--src/server/Task.hpp9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/server/Task.hpp b/src/server/Task.hpp
index 203627a1..3bcfbb40 100644
--- a/src/server/Task.hpp
+++ b/src/server/Task.hpp
@@ -21,6 +21,7 @@
#include <cassert>
#include <deque>
#include <functional>
+#include <memory>
#include <ostream>
namespace Ingen {
@@ -77,14 +78,14 @@ public:
bool empty() const { return _mode != Mode::SINGLE && _children.empty(); }
/** Simplify task expression. */
- static Task simplify(Task task);
+ static std::unique_ptr<Task> simplify(std::unique_ptr<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.emplace_front(std::move(task));
+ _children.emplace_front(std::make_unique<Task>(std::move(task)));
}
Mode mode() const { return _mode; }
@@ -94,14 +95,14 @@ public:
void set_done(bool done) { _done = done; }
private:
- typedef std::deque<Task> Children;
+ typedef std::deque<std::unique_ptr<Task>> Children;
Task(const Task&) = delete;
Task& operator=(const Task&) = delete;
Task* get_task(RunContext& context);
- void append(Task t) {
+ void append(std::unique_ptr<Task>&& t) {
_children.emplace_back(std::move(t));
}