X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/138e6f86566611611b1115c957cae0a1c6a85a4b..b723df623c506205c9a65b32fc0c0177e494116f:/src/simix/smx_private.h diff --git a/src/simix/smx_private.h b/src/simix/smx_private.h index 333ea07d33..1808c16991 100644 --- a/src/simix/smx_private.h +++ b/src/simix/smx_private.h @@ -8,6 +8,11 @@ #define _SIMIX_PRIVATE_H #include +#include +#include + +#include + #include "src/internal_config.h" #include "simgrid/simix.h" @@ -58,26 +63,40 @@ typedef struct s_smx_context_factory *smx_context_factory_t; #endif -SG_BEGIN_DECL() - /********************************** Simix Global ******************************/ -typedef struct s_smx_global { - smx_context_factory_t context_factory; - xbt_dynar_t process_to_run; - xbt_dynar_t process_that_ran; - xbt_swag_t process_list; - xbt_swag_t process_to_destroy; - smx_process_t maestro_process; - xbt_dict_t registered_functions; - smx_creation_func_t create_process_function; - void_pfn_smxprocess_t kill_process_function; + +namespace simgrid { +namespace simix { + +class Global { +public: + smx_context_factory_t context_factory = nullptr; + xbt_dynar_t process_to_run = nullptr; + xbt_dynar_t process_that_ran = nullptr; + xbt_swag_t process_list = nullptr; + xbt_swag_t process_to_destroy = nullptr; + smx_process_t maestro_process = nullptr; + + // Maps function names to actor code: + std::unordered_map registered_functions; + + // This might be used when no corresponding function name is registered: + simgrid::simix::ActorCodeFactory default_function; + + smx_creation_func_t create_process_function = nullptr; + void_pfn_smxprocess_t kill_process_function = nullptr; /** Callback used when killing a SMX_process */ - void_pfn_smxprocess_t cleanup_process_function; + void_pfn_smxprocess_t cleanup_process_function = nullptr; + xbt_os_mutex_t mutex = nullptr; +}; + +} +} + +SG_BEGIN_DECL() - xbt_os_mutex_t mutex; -} s_smx_global_t, *smx_global_t; +XBT_PUBLIC_DATA(std::unique_ptr) simix_global; -XBT_PUBLIC_DATA(smx_global_t) simix_global; extern XBT_PRIVATE unsigned long simix_process_maxpid; XBT_PUBLIC(void) SIMIX_clean(void); @@ -90,8 +109,6 @@ XBT_PUBLIC(void) SIMIX_clean(void); xbt_ex e(msg); \ e.category = cat; \ e.value = val; \ - e.procname = xbt_procname(); \ - e.pid = xbt_getpid(); \ e.file = __FILE__; \ e.line = __LINE__; \ e.func = __func__; \ @@ -157,4 +174,6 @@ XBT_PRIVATE void SIMIX_process_set_cleanup_function(smx_process_t process, void_ SG_END_DECL() +XBT_PRIVATE simgrid::simix::ActorCodeFactory& SIMIX_get_actor_code_factory(const char *name); + #endif