Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Define SIMIX_process_on_exit() taking a std::function.
authorArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Fri, 1 Jun 2018 12:29:40 +0000 (14:29 +0200)
committerArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Fri, 1 Jun 2018 12:29:40 +0000 (14:29 +0200)
include/simgrid/simix.h
src/simix/ActorImpl.cpp

index 57af3ba..982468f 100644 (file)
@@ -11,6 +11,7 @@
 #include <xbt/ex.h>
 #include <xbt/parmap.h>
 #ifdef __cplusplus
+#include <functional>
 #include <map>
 #endif
 
@@ -150,6 +151,10 @@ XBT_PUBLIC void SIMIX_process_on_exit(smx_actor_t process, int_f_pvoid_pvoid_t f
 
 SG_END_DECL()
 
+#ifdef __cplusplus
+XBT_PUBLIC void SIMIX_process_on_exit(smx_actor_t process, std::function<void(int, void*)> fun, void* data);
+#endif
+
 /****************************** Communication *********************************/
 XBT_PUBLIC void SIMIX_comm_set_copy_data_callback(void (*callback)(smx_activity_t, void*, size_t));
 XBT_PUBLIC void SIMIX_comm_copy_pointer_callback(smx_activity_t comm, void* buff, size_t buff_size);
index 736e426..caabcb2 100644 (file)
@@ -762,12 +762,16 @@ void SIMIX_process_on_exit_runall(smx_actor_t process) {
   }
 }
 
-void SIMIX_process_on_exit(smx_actor_t process, int_f_pvoid_pvoid_t fun, void *data) {
-  xbt_assert(process, "current process not found: are you in maestro context ?");
+void SIMIX_process_on_exit(smx_actor_t process, int_f_pvoid_pvoid_t fun, void* data)
+{
+  SIMIX_process_on_exit(process, [fun](int a, void* b) { fun((void*)(intptr_t)a, b); }, data);
+}
 
-  s_smx_process_exit_fun_t exit_fun = {[fun](int a, void* b) { fun((void*)(intptr_t)a, b); }, data};
+void SIMIX_process_on_exit(smx_actor_t process, std::function<void(int, void*)> fun, void* data)
+{
+  xbt_assert(process, "current process not found: are you in maestro context ?");
 
-  process->on_exit.push_back(exit_fun);
+  process->on_exit.emplace_back(s_smx_process_exit_fun_t{fun, data});
 }
 
 /**