summaryrefslogtreecommitdiffstats
path: root/include/framework/scheduling/Task.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/framework/scheduling/Task.h')
-rw-r--r--include/framework/scheduling/Task.h112
1 files changed, 27 insertions, 85 deletions
diff --git a/include/framework/scheduling/Task.h b/include/framework/scheduling/Task.h
index 3c1b158..518159d 100644
--- a/include/framework/scheduling/Task.h
+++ b/include/framework/scheduling/Task.h
@@ -5,111 +5,53 @@
#include <variant>
#include <future>
+#include <functional>
#include "framework/util/Configuration.h"
namespace de {
-enum class TaskType {
- MERGE,
- QUERY
+struct MergeArgs {
+ void *version;
+ void *buffer;
+ std::vector<MergeTask> merges;
+ std::promise<bool> result;
};
-struct TaskDependency {
- std::promise<void> prom;
- std::future<void> fut;
+template <typename R>
+struct QueryArgs {
+ void *version;
+ void *buffer;
+ std::promise<std::vector<R>> result_set;
+ void *query_parms;
};
-struct MergeTask {
- level_index m_source_level;
- level_index m_target_level;
- size_t m_timestamp;
- size_t m_size;
- TaskType m_type;
- std::unique_ptr<TaskDependency> m_dep;
-
- MergeTask() = default;
-
- MergeTask(level_index source, level_index target, size_t size, size_t timestamp)
- : m_source_level(source)
- , m_target_level(target)
- , m_timestamp(timestamp)
- , m_size(size)
- , m_type(TaskType::MERGE)
- , m_dep(std::make_unique<TaskDependency>()){}
-
+typedef std::function<void(void*)> Job;
- MergeTask(MergeTask &t)
- : m_source_level(t.m_source_level)
- , m_target_level(t.m_target_level)
- , m_timestamp(t.m_timestamp)
- , m_size(t.m_size)
- , m_type(TaskType::MERGE)
- , m_dep(std::move(t.m_dep))
+struct Task {
+ Task(size_t size, size_t ts, Job job, void *args)
+ : m_job(job)
+ , m_size(size)
+ , m_timestamp(ts)
+ , m_args(args)
{}
-
- TaskType get_type() const {
- return m_type;
- }
-
- void make_dependent_on(MergeTask &task) {
- m_dep->fut = task.m_dep->prom.get_future();
- }
-
- void make_dependent_on(TaskDependency *dep) {
- m_dep->fut = dep->prom.get_future();
- }
-
- friend bool operator<(const MergeTask &self, const MergeTask &other) {
- return self.m_timestamp < other.m_timestamp;
- }
-
- friend bool operator>(const MergeTask &self, const MergeTask &other) {
- return self.m_timestamp > other.m_timestamp;
- }
-
-};
-
-struct QueryTask {
- size_t m_timestamp;
+ Job m_job;
size_t m_size;
- TaskType m_type;
- std::unique_ptr<TaskDependency> m_dep;
-
- QueryTask(QueryTask &t)
- : m_timestamp(t.m_timestamp)
- , m_size(t.m_size)
- , m_type(t.m_type)
- , m_dep(std::move(t.m_dep))
- {}
-
- TaskType get_type() const {
- return m_type;
- }
-
- void SetDependency(QueryTask &task) {
- m_dep->fut = task.m_dep->prom.get_future();
- }
-
- void SetDependency(TaskDependency *dep) {
- m_dep->fut = dep->prom.get_future();
- }
+ size_t m_timestamp;
+ void *m_args;
- friend bool operator<(const QueryTask &self, const QueryTask &other) {
+ friend bool operator<(const Task &self, const Task &other) {
return self.m_timestamp < other.m_timestamp;
}
- friend bool operator>(const QueryTask &self, const QueryTask &other) {
+ friend bool operator>(const Task &self, const Task &other) {
return self.m_timestamp > other.m_timestamp;
}
-};
-struct GetTaskType {
- TaskType operator()(const MergeTask &t) { return t.get_type(); }
- TaskType operator()(const QueryTask &t) { return t.get_type(); }
+ void operator()() {
+ m_job(m_args);
+ }
};
-typedef std::variant<MergeTask, QueryTask> Task;
-
}