From 60591642995477c099728d2ecf7d5d2533e642aa Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Thu, 2 Nov 2023 15:29:16 +0100 Subject: [PATCH] TaskTree: Make setup handler optional Change-Id: Idfcaaf5cc5f69895d8cf9bf6e4ee673e524b61fe Reviewed-by: Qt CI Bot Reviewed-by: Marcus Tillmanns Reviewed-by: --- src/libs/solutions/tasking/tasktree.cpp | 4 ++-- src/libs/solutions/tasking/tasktree.h | 17 ++++++++++------- tests/auto/solutions/tasking/tst_tasking.cpp | 6 +++++- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/libs/solutions/tasking/tasktree.cpp b/src/libs/solutions/tasking/tasktree.cpp index c8347af1bb8..348481c8fc9 100644 --- a/src/libs/solutions/tasking/tasktree.cpp +++ b/src/libs/solutions/tasking/tasktree.cpp @@ -956,8 +956,8 @@ void GroupItem::addChildren(const QList &children) GroupItem GroupItem::withTimeout(const GroupItem &item, milliseconds timeout, const GroupEndHandler &handler) { - const TimeoutTask::EndHandler taskHandler = handler - ? [handler](const milliseconds &) { handler(); } : TimeoutTask::EndHandler(); + const TimeoutTask::EndFunction taskHandler = handler + ? [handler](const milliseconds &) { handler(); } : TimeoutTask::EndFunction(); return Group { parallel, stopOnFinished, diff --git a/src/libs/solutions/tasking/tasktree.h b/src/libs/solutions/tasking/tasktree.h index 5b94cfc3099..99edad20272 100644 --- a/src/libs/solutions/tasking/tasktree.h +++ b/src/libs/solutions/tasking/tasktree.h @@ -324,17 +324,18 @@ public: static_assert(std::is_base_of_v, Adapter>, "The Adapter type for the CustomTask needs to be derived from " "TaskAdapter."); - using DoneHandler = std::function; - using EndHandler = std::function; + using SetupFunction = std::function; + using DoneFunction = std::function; + using EndFunction = std::function; static Adapter *createAdapter() { return new Adapter; } CustomTask() : GroupItem({&createAdapter}) {} - template - CustomTask(SetupHandler &&setup, const EndHandler &done = {}, const EndHandler &error = {}) + template + CustomTask(SetupHandler &&setup, const EndFunction &done = {}, const EndFunction &error = {}) : GroupItem({&createAdapter, wrapSetup(std::forward(setup)), wrapEnds(done, error)}) {} template - CustomTask(SetupHandler &&setup, const DoneHandler &done) + CustomTask(SetupHandler &&setup, const DoneFunction &done) : GroupItem({&createAdapter, wrapSetup(std::forward(setup)), wrapDone(done)}) {} @@ -346,6 +347,8 @@ public: private: template static GroupItem::TaskSetupHandler wrapSetup(SetupHandler &&handler) { + if constexpr (std::is_same_v>) + return {}; // When user passed {} for setup handler. static constexpr bool isDynamic = std::is_same_v, typename Adapter::TaskType &>>; constexpr bool isVoid = std::is_same_v