X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/614a0122458f3e4b0de6c0750f26bdeecc4f128a..3ac4f74feda6a7d2c2b51d66c7612977d14d971f:/include/simgrid/s4u/engine.hpp diff --git a/include/simgrid/s4u/engine.hpp b/include/simgrid/s4u/engine.hpp index bee4afa5c0..07c471c996 100644 --- a/include/simgrid/s4u/engine.hpp +++ b/include/simgrid/s4u/engine.hpp @@ -6,17 +6,30 @@ #ifndef SIMGRID_S4U_ENGINE_HPP #define SIMGRID_S4U_ENGINE_HPP +#include +#include +#include + #include +#include + +#include #include namespace simgrid { +namespace kernel { +class EngineImpl; +} namespace s4u { /** @brief Simulation engine * * This class is an interface to the simulation engine. */ XBT_PUBLIC_CLASS Engine { +private: + ~Engine(); + public: /** Constructor, taking the command line parameters of your main function */ Engine(int *argc, char **argv); @@ -58,6 +71,29 @@ public: /** @brief Retrieve the AS of the given name (or nullptr if not found) */ simgrid::s4u::As *asByNameOrNull(const char *name); + template + void registerFunction(const char* name) + { + simgrid::simix::registerFunction(name, [](std::vector args){ + return simgrid::simix::ActorCode([args] { + F code(std::move(args)); + code(); + }); + }); + } + + template + void registerFunction(const char* name, F code) + { + simgrid::simix::registerFunction(name, [code](std::vector args){ + return simgrid::simix::ActorCode([code,args] { + code(std::move(args)); + }); + }); + } + + simgrid::kernel::EngineImpl* pimpl; + private: static s4u::Engine *instance_; };