X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/5942182c3a29de424e91a87f019a596b3a2e71bf..a511865336e83ac3654632265ed00b8f0bf0eccc:/include/simgrid/simix.hpp diff --git a/include/simgrid/simix.hpp b/include/simgrid/simix.hpp index c28bf8b12a..cf51596aed 100644 --- a/include/simgrid/simix.hpp +++ b/include/simgrid/simix.hpp @@ -157,19 +157,32 @@ public: char* operator[](std::size_t i) { return argv_[i]; } }; -inline -std::function wrap_main(xbt_main_func_t code, int argc, const char*const* argv) +inline std::function wrap_main( + xbt_main_func_t code, std::shared_ptr args) { if (code) { - auto arg = std::make_shared(argc, argv); return [=]() { - code(arg->argc(), arg->argv()); + code(args->argc(), args->argv()); }; } - // TODO, we should free argv else return std::function(); } +inline +std::function wrap_main(xbt_main_func_t code, simgrid::simix::args args) +{ + if (code) + return wrap_main(code, std::unique_ptr( + new simgrid::simix::args(std::move(args)))); + else return std::function(); +} + +inline +std::function wrap_main(xbt_main_func_t code, int argc, const char*const* argv) +{ + return wrap_main(code, simgrid::simix::args(argc, argv)); +} + class Context; class ContextFactory; @@ -270,4 +283,38 @@ XBT_PUBLIC(void) create_maestro(std::function code); } } +/* + * Type of function that creates a process. + * The function must accept the following parameters: + * void* process: the process created will be stored there + * const char *name: a name for the object. It is for user-level information and can be NULL + * xbt_main_func_t code: is a function describing the behavior of the process + * void *data: data a pointer to any data one may want to attach to the new object. + * sg_host_t host: the location where the new process is executed + * int argc, char **argv: parameters passed to code + * xbt_dict_t pros: properties + */ +typedef smx_process_t (*smx_creation_func_t) ( + /* name */ const char*, + /* code */ xbt_main_func_t, + /* userdata */ void*, + /* hostname */ const char*, + /* kill_time */ double, + simgrid::simix::args args, + /* props */ xbt_dict_t, + /* auto_restart */ int, + /* parent_process */ smx_process_t); + +extern "C" +XBT_PUBLIC(void) SIMIX_function_register_process_create(smx_creation_func_t function); + +XBT_PUBLIC(smx_process_t) simcall_process_create(const char *name, + xbt_main_func_t code, + void *data, + const char *hostname, + double kill_time, + simgrid::simix::args args, + xbt_dict_t properties, + int auto_restart); + #endif