From 2a762d216ded5be883882f02d8572cb9113ad191 Mon Sep 17 00:00:00 2001 From: Patrick Wuttke Date: Tue, 7 Feb 2023 18:10:58 +0100 Subject: [PATCH] Implemented releasing of weak tasks. --- include/TaskManager.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/include/TaskManager.h b/include/TaskManager.h index 652b77c..3365d5d 100644 --- a/include/TaskManager.h +++ b/include/TaskManager.h @@ -136,6 +136,23 @@ public: m_tasks.push_back(std::move(in_task)); } + bool IsManagedTask(const WeakTaskHandle& in_task) + { + return std::find(m_strongRefs.begin(), m_strongRefs.end(), in_task) != m_strongRefs.end(); + } + + WeakTask ReleaseWeakTask(const WeakTaskHandle& in_task) + { + assert(!IsManagedTask(in_task)); + + auto itWeak = std::find(m_tasks.begin(), m_tasks.end(), in_task); + assert(itWeak != m_tasks.end()); + WeakTask task = std::move(*itWeak); + *itWeak = nullptr; // otherwise the next line will kill the task (in destructor) + m_tasks.erase(itWeak); + return task; + } + Task<> ReleaseManagedTask(const WeakTaskHandle& in_task) { auto itWeak = std::find(m_tasks.begin(), m_tasks.end(), in_task);