diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/mbgl/util/run_loop.hpp | 9 | ||||
-rw-r--r-- | include/mbgl/util/work_task.hpp | 3 | ||||
-rw-r--r-- | include/mbgl/util/work_task_impl.hpp | 44 |
3 files changed, 0 insertions, 56 deletions
diff --git a/include/mbgl/util/run_loop.hpp b/include/mbgl/util/run_loop.hpp index 1804fb12bd..14352ca823 100644 --- a/include/mbgl/util/run_loop.hpp +++ b/include/mbgl/util/run_loop.hpp @@ -63,15 +63,6 @@ public: return std::make_unique<WorkRequest>(task); } - // Invoke fn(args...) on this RunLoop, then invoke callback(results...) on the current RunLoop. - template <class Fn, class... Args> - std::unique_ptr<AsyncRequest> - invokeWithCallback(Fn&& fn, Args&&... args) { - std::shared_ptr<WorkTask> task = WorkTask::makeWithCallback(std::forward<Fn>(fn), std::forward<Args>(args)...); - push(task); - return std::make_unique<WorkRequest>(task); - } - class Impl; private: diff --git a/include/mbgl/util/work_task.hpp b/include/mbgl/util/work_task.hpp index dda8e5d00f..f2dcfcfe86 100644 --- a/include/mbgl/util/work_task.hpp +++ b/include/mbgl/util/work_task.hpp @@ -18,9 +18,6 @@ public: template <class Fn, class... Args> static std::shared_ptr<WorkTask> make(Fn&&, Args&&...); - - template <class Fn, class... Args> - static std::shared_ptr<WorkTask> makeWithCallback(Fn&&, Args&&...); }; } // namespace mbgl diff --git a/include/mbgl/util/work_task_impl.hpp b/include/mbgl/util/work_task_impl.hpp index 8ebc7d45f8..276e0d6237 100644 --- a/include/mbgl/util/work_task_impl.hpp +++ b/include/mbgl/util/work_task_impl.hpp @@ -62,48 +62,4 @@ std::shared_ptr<WorkTask> WorkTask::make(Fn&& fn, Args&&... args) { flag); } -namespace detail { -template <class Tuple, size_t... Indexes> -auto packageArgumentsAndCallback(std::shared_ptr<std::atomic<bool>> flag, - Tuple&& args, - std::index_sequence<Indexes...>) { - auto callback = std::get<sizeof...(Indexes)>(args); - - // Create a lambda L1 that invokes another lambda L2 on the current RunLoop R, that calls - // the callback C. Both lambdas check the flag before proceeding. L1 needs to check the flag - // because if the request was cancelled, then R might have been destroyed. L2 needs to check - // the flag because the request may have been cancelled after L2 was invoked but before it - // began executing. - - auto l2 = [flag, callback] (auto&&... results) { - if (!*flag) { - callback(std::forward<decltype(results)>(results)...); - } - }; - - auto l1 = [flag, current = util::RunLoop::Get(), l2_ = l2] (auto&&... results) { - if (!*flag) { - current->invoke(l2_, std::forward<decltype(results)>(results)...); - } - }; - - return std::make_tuple(std::get<Indexes>(std::forward<Tuple>(args))..., l1); -} -} // namespace detail - -template <class Fn, class... Args> -std::shared_ptr<WorkTask> WorkTask::makeWithCallback(Fn&& fn, Args&&... args) { - auto flag = std::make_shared<std::atomic<bool>>(); - *flag = false; - - auto tuple = detail::packageArgumentsAndCallback(flag, - std::forward_as_tuple(std::forward<Args>(args)...), - std::make_index_sequence<sizeof...(Args) - 1>()); - - return std::make_shared<WorkTaskImpl<std::decay_t<Fn>, decltype(tuple)>>( - std::forward<Fn>(fn), - std::move(tuple), - flag); -} - } // namespace mbgl |