From 9b293653796940679ea8e2bd162e547248546e29 Mon Sep 17 00:00:00 2001 From: Gabriel Corona Date: Mon, 27 Jun 2016 14:02:54 +0200 Subject: [PATCH 1/1] [s4u] Remove s4u::Task, use xbt::Task instead We first one was an implementation detail but it's not useful anymore. --- include/simgrid/s4u/actor.hpp | 26 +++----------------------- 1 file changed, 3 insertions(+), 23 deletions(-) diff --git a/include/simgrid/s4u/actor.hpp b/include/simgrid/s4u/actor.hpp index 4f3a1a9f5d..52c7286841 100644 --- a/include/simgrid/s4u/actor.hpp +++ b/include/simgrid/s4u/actor.hpp @@ -124,33 +124,13 @@ namespace s4u { /** @brief Simulation Agent (see \ref s4u_actor)*/ XBT_PUBLIC_CLASS Actor { private: - /** Wrap a (possibly non-copyable) single-use task into a `std::function` */ - template - class Task { - public: - Task(F&& code, Args&&... args) : - code_(std::forward(code)), - args_(std::forward(args)...) - { - done_.clear(); - } - void operator()() - { - if (done_.test_and_set()) - throw std::logic_error("Actor task already executed"); - simgrid::xbt::apply(std::move(code_), std::move(args_)); - } - private: - std::atomic_flag done_; - F code_; - std::tuple args_; - }; /** Wrap a (possibly non-copyable) single-use task into a `std::function` */ template static std::function wrap_task(F f, Args... args) { - std::shared_ptr> task( - new Task(std::move(f), std::move(args)...)); + typedef decltype(f(std::move(args)...)) R; + auto task = std::make_shared>( + simgrid::xbt::makeTask(std::move(f), std::move(args)...)); return [=] { (*task)(); }; -- 2.20.1