X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/1f0790965ada172e7ac96eb848759e02f7fbc8ca..b9684d3607aa558c95b7185ddf147b478a7e367f:/src/simix/smx_private.h diff --git a/src/simix/smx_private.h b/src/simix/smx_private.h index feb99909eb..6906a08b6d 100644 --- a/src/simix/smx_private.h +++ b/src/simix/smx_private.h @@ -8,6 +8,10 @@ #define _SIMIX_PRIVATE_H #include +#include +#include + +#include #include "src/internal_config.h" #include "simgrid/simix.h" @@ -58,26 +62,46 @@ 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 { + +// What's executed as SIMIX actor code: +typedef std::function ActorCode; + +// Create ActorCode based on argv: +typedef std::function ActorCodeFactory; + +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; +}; - xbt_os_mutex_t mutex; -} s_smx_global_t, *smx_global_t; +} +} + +SG_BEGIN_DECL() + +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); @@ -153,6 +177,8 @@ XBT_PRIVATE void SIMIX_post_create_environment(void); // FIXME, Dirty hack for SMPI+MSG XBT_PRIVATE void SIMIX_process_set_cleanup_function(smx_process_t process, void_pfn_smxprocess_t cleanup); +XBT_PRIVATE simgrid::simix::ActorCodeFactory& SIMIX_get_actor_code_factory(const char *name); + SG_END_DECL() #endif