From 92ac46df6afa8ee76f972cceb681cf32658f84a2 Mon Sep 17 00:00:00 2001 From: Mel Date: Mon, 12 Jun 2023 23:07:36 +0200 Subject: Start generation from player position --- src/Compute/Queue.hpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'src/Compute') diff --git a/src/Compute/Queue.hpp b/src/Compute/Queue.hpp index 6aba1ab..53acc2d 100644 --- a/src/Compute/Queue.hpp +++ b/src/Compute/Queue.hpp @@ -5,7 +5,7 @@ #include #include #include -#include +#include #include namespace MC::Compute { @@ -20,9 +20,9 @@ public: } }; - void add(I id, std::function execute) { + void add(I id, float priority, std::function execute) { std::scoped_lock work_lock(m_control->work.mutex); - m_control->work.jobs.push_back({id, std::move(execute)}); + m_control->work.jobs.emplace(id, priority, execute); } struct Result { @@ -43,13 +43,19 @@ public: private: struct Job { + Job() = default; + Job(I id, float priority, std::function execute) : id(id), priority(priority), execute(execute) {} + I id; + float priority; std::function execute; + + bool operator>(const Job& other) const { return priority > other.priority; } }; struct Work { std::mutex mutex; - std::vector jobs; + std::priority_queue, std::greater> jobs; }; struct Results { @@ -71,8 +77,8 @@ private: { std::scoped_lock work_lock(control->work.mutex); if (!control->work.jobs.empty()) { - job = control->work.jobs.back(); - control->work.jobs.pop_back(); + job = control->work.jobs.top(); + control->work.jobs.pop(); nothing_to_do = false; } } -- cgit 1.4.1