Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Define Actor::on_exit() taking a std::function.
authorArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Fri, 1 Jun 2018 12:37:21 +0000 (14:37 +0200)
committerArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Fri, 1 Jun 2018 12:37:21 +0000 (14:37 +0200)
include/simgrid/s4u/Actor.hpp
src/s4u/s4u_Actor.cpp

index 6d6c6d8..5ed3195 100644 (file)
@@ -6,6 +6,7 @@
 #ifndef SIMGRID_S4U_ACTOR_HPP
 #define SIMGRID_S4U_ACTOR_HPP
 
 #ifndef SIMGRID_S4U_ACTOR_HPP
 #define SIMGRID_S4U_ACTOR_HPP
 
+#include <functional>
 #include <simgrid/chrono.hpp>
 #include <xbt/Extendable.hpp>
 #include <xbt/functional.hpp>
 #include <simgrid/chrono.hpp>
 #include <xbt/Extendable.hpp>
 #include <xbt/functional.hpp>
@@ -237,6 +238,7 @@ public:
    * executed when your actor is killed. You should use them to free the data used by your actor.
    */
   void on_exit(int_f_pvoid_pvoid_t fun, void* data);
    * executed when your actor is killed. You should use them to free the data used by your actor.
    */
   void on_exit(int_f_pvoid_pvoid_t fun, void* data);
+  void on_exit(std::function<void(int, void*)> fun, void* data);
 
   /** Sets the time at which that actor should be killed */
   void set_kill_time(double time);
 
   /** Sets the time at which that actor should be killed */
   void set_kill_time(double time);
@@ -408,6 +410,7 @@ XBT_PUBLIC void kill();
 
 /** @brief Add a function to the list of "on_exit" functions. */
 XBT_PUBLIC void on_exit(int_f_pvoid_pvoid_t fun, void* data);
 
 /** @brief Add a function to the list of "on_exit" functions. */
 XBT_PUBLIC void on_exit(int_f_pvoid_pvoid_t fun, void* data);
+XBT_PUBLIC void on_exit(std::function<void(int, void*)> fun, void* data);
 
 /** @brief Migrate the actor to a new host. */
 XBT_PUBLIC void migrate(Host* new_host);
 
 /** @brief Migrate the actor to a new host. */
 XBT_PUBLIC void migrate(Host* new_host);
index 31746fc..bd5b149 100644 (file)
@@ -79,6 +79,11 @@ void Actor::on_exit(int_f_pvoid_pvoid_t fun, void* data)
   simgrid::simix::simcall([this, fun, data] { SIMIX_process_on_exit(pimpl_, fun, data); });
 }
 
   simgrid::simix::simcall([this, fun, data] { SIMIX_process_on_exit(pimpl_, fun, data); });
 }
 
+void Actor::on_exit(std::function<void(int, void*)> fun, void* data)
+{
+  simgrid::simix::simcall([this, fun, data] { SIMIX_process_on_exit(pimpl_, fun, data); });
+}
+
 /** @brief Moves the actor to another host
  *
  * If the actor is currently blocked on an execution activity, the activity is also
 /** @brief Moves the actor to another host
  *
  * If the actor is currently blocked on an execution activity, the activity is also
@@ -371,6 +376,11 @@ void on_exit(int_f_pvoid_pvoid_t fun, void* data)
   SIMIX_process_self()->iface()->on_exit(fun, data);
 }
 
   SIMIX_process_self()->iface()->on_exit(fun, data);
 }
 
+void on_exit(std::function<void(int, void*)> fun, void* data)
+{
+  SIMIX_process_self()->iface()->on_exit(fun, data);
+}
+
 /** @brief Moves the current actor to another host
  *
  * @see simgrid::s4u::Actor::migrate() for more information
 /** @brief Moves the current actor to another host
  *
  * @see simgrid::s4u::Actor::migrate() for more information