From 02e84b1e918a6f06799ee08e74320aae45433115 Mon Sep 17 00:00:00 2001 From: Arnaud Giersch Date: Thu, 14 Mar 2019 14:10:58 +0100 Subject: [PATCH] Tidying simix::Timer. --- include/simgrid/simix.hpp | 20 +++++++++++++------- src/simix/smx_global.cpp | 17 ++++------------- 2 files changed, 17 insertions(+), 20 deletions(-) diff --git a/include/simgrid/simix.hpp b/include/simgrid/simix.hpp index aa52f47392..9b48080f25 100644 --- a/include/simgrid/simix.hpp +++ b/include/simgrid/simix.hpp @@ -86,7 +86,7 @@ class Timer { public: decltype(simix_timers)::handle_type handle_; - Timer(double date, simgrid::xbt::Task callback) : date(date), callback(std::move(callback)) {} + Timer(double date, simgrid::xbt::Task&& callback) : date(date), callback(std::move(callback)) {} simgrid::xbt::Task callback; double get_date() { return date; } @@ -97,13 +97,19 @@ public: return set(date, simgrid::xbt::Task(std::move(callback))); } - template static inline Timer* set(double date, R (*callback)(T*), T* arg) + template + XBT_ATTRIB_DEPRECATED_v325("Please use a lambda or std::bind") static inline Timer* set(double date, + R (*callback)(T*), T* arg) { - return set(date, [callback, arg]() { callback(arg); }); + return set(date, std::bind(callback, arg)); } - static Timer* set(double date, void (*callback)(void*), void* arg); - static Timer* set(double date, simgrid::xbt::Task callback); + XBT_ATTRIB_DEPRECATED_v325("Please use a lambda or std::bind") static Timer* set(double date, void (*callback)(void*), + void* arg) + { + return set(date, std::bind(callback, arg)); + } + static Timer* set(double date, simgrid::xbt::Task&& callback); static double next() { return simix_timers.empty() ? -1.0 : simix_timers.top().first; } }; @@ -114,7 +120,7 @@ XBT_PUBLIC smx_actor_t simcall_process_create(const std::string& name, const sim void* data, sg_host_t host, std::unordered_map* properties); -XBT_PUBLIC smx_timer_t SIMIX_timer_set(double date, simgrid::xbt::Task callback); - +XBT_ATTRIB_DEPRECATED_v325("Please use simgrid::xbt::Timer::set") XBT_PUBLIC smx_timer_t + SIMIX_timer_set(double date, simgrid::xbt::Task&& callback); #endif diff --git a/src/simix/smx_global.cpp b/src/simix/smx_global.cpp index 2485979cdc..108ba80fea 100644 --- a/src/simix/smx_global.cpp +++ b/src/simix/smx_global.cpp @@ -124,14 +124,7 @@ static void install_segvhandler() namespace simgrid { namespace simix { -Timer* Timer::set(double date, void (*callback)(void*), void* arg) -{ - Timer* timer = new Timer(date, simgrid::xbt::make_task([callback, arg]() { callback(arg); })); - timer->handle_ = simix_timers.emplace(std::make_pair(date, timer)); - return timer; -} - -Timer* Timer::set(double date, simgrid::xbt::Task callback) +Timer* Timer::set(double date, simgrid::xbt::Task&& callback) { Timer* timer = new Timer(date, std::move(callback)); timer->handle_ = simix_timers.emplace(std::make_pair(date, timer)); @@ -545,14 +538,12 @@ double SIMIX_timer_next() smx_timer_t SIMIX_timer_set(double date, void (*callback)(void*), void *arg) { - return simgrid::simix::Timer::set(date, callback, arg); + return simgrid::simix::Timer::set(date, std::bind(callback, arg)); } -smx_timer_t SIMIX_timer_set(double date, simgrid::xbt::Task callback) +smx_timer_t SIMIX_timer_set(double date, simgrid::xbt::Task&& callback) // deprecated { - smx_timer_t timer = new simgrid::simix::Timer(date, std::move(callback)); - timer->handle_ = simgrid::simix::simix_timers.emplace(std::make_pair(date, timer)); - return timer; + return simgrid::simix::Timer::set(date, std::move(callback)); } /** @brief cancels a timer that was added earlier */ -- 2.20.1