From bd09ae420315e4fb0d9e20749c575d17c218e5de Mon Sep 17 00:00:00 2001 From: Arnaud Giersch Date: Fri, 1 Jun 2018 14:29:40 +0200 Subject: [PATCH] Define SIMIX_process_on_exit() taking a std::function. --- include/simgrid/simix.h | 5 +++++ src/simix/ActorImpl.cpp | 12 ++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) 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}); } /** -- 2.20.1