X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/931c72e9293d64a1797a6187dd0e744408c23d59..e1229871aeda91b7ad57dc2139fdb458ba0e92f1:/src/simix/smx_private.h diff --git a/src/simix/smx_private.h b/src/simix/smx_private.h index feb99909eb..108b770ecb 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 #include "src/internal_config.h" #include "simgrid/simix.h" @@ -58,26 +63,43 @@ 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; + + std::vector> tasks; + std::vector> tasksTemp; +}; + +} +} + +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); @@ -87,12 +109,9 @@ XBT_PUBLIC(void) SIMIX_clean(void); #define SMX_EXCEPTION(issuer, cat, val, msg) \ if (1) { \ smx_process_t _smx_throw_issuer = (issuer); /* evaluate only once */ \ - xbt_ex e(msg); \ + xbt_ex e(XBT_THROW_POINT, msg); \ e.category = cat; \ e.value = val; \ - e.file = __FILE__; \ - e.line = __LINE__; \ - e.func = __func__; \ _smx_throw_issuer->exception = std::make_exception_ptr(e); \ } else ((void)0) @@ -155,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