From: Gabriel Corona Date: Mon, 27 Jun 2016 12:02:54 +0000 (+0200) Subject: [s4u] Remove s4u::Task, use xbt::Task instead X-Git-Tag: v3_14~853 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/9b293653796940679ea8e2bd162e547248546e29?hp=020bb591f6619501a39c98260ea07a6faf4da8dc;ds=sidebyside [s4u] Remove s4u::Task, use xbt::Task instead We first one was an implementation detail but it's not useful anymore. --- 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)(); };