From: Arnaud Giersch Date: Fri, 1 Jun 2018 12:29:40 +0000 (+0200) Subject: Define SIMIX_process_on_exit() taking a std::function. X-Git-Tag: v3.20~177 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/bd09ae420315e4fb0d9e20749c575d17c218e5de Define SIMIX_process_on_exit() taking a std::function. --- diff --git a/include/simgrid/simix.h b/include/simgrid/simix.h index 57af3ba4d3..982468fd85 100644 --- a/include/simgrid/simix.h +++ b/include/simgrid/simix.h @@ -11,6 +11,7 @@ #include #include #ifdef __cplusplus +#include #include #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 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); diff --git a/src/simix/ActorImpl.cpp b/src/simix/ActorImpl.cpp index 736e4264bd..caabcb26ca 100644 --- a/src/simix/ActorImpl.cpp +++ b/src/simix/ActorImpl.cpp @@ -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 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}); } /**