]> AND Public Git Repository - simgrid.git/blobdiff - include/simgrid/s4u/Engine.hpp
Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
more sg_exec functions
[simgrid.git] / include / simgrid / s4u / Engine.hpp
index f62b955895583ed58d47983a1ccf5118d23fd7e1..fc1c74792761a6c20f6970601cc9ad6a00870521 100644 (file)
@@ -25,6 +25,8 @@ namespace s4u {
  * This is a singleton containing all the main functions of the simulation.
  */
 class XBT_PUBLIC Engine {
+  friend simgrid::kernel::EngineImpl;
+
 public:
   /** Constructor, taking the command line parameters of your main function */
   explicit Engine(int* argc, char** argv);
@@ -51,28 +53,31 @@ public:
   XBT_ATTRIB_DEPRECATED_v330("Please change the return code of your actors to void") void register_function(
       const std::string& name, int (*code)(int, char**));
 
-  void register_function(const std::string& name, void (*code)(int, char**));
-  void register_function(const std::string& name, void (*code)(std::vector<std::string>));
+  void register_function(const std::string& name, const std::function<void(int, char**)>& code);
+  void register_function(const std::string& name, const std::function<void(std::vector<std::string>)>& code);
 
   XBT_ATTRIB_DEPRECATED_v330("Please change the return code of your actors to void") void register_default(
       int (*code)(int, char**));
-  void register_default(void (*code)(int, char**));
+  void register_default(const std::function<void(int, char**)>& code);
+  void register_default(const kernel::actor::ActorCodeFactory& factory);
 
+  void register_function(const std::string& name, const kernel::actor::ActorCodeFactory& factory);
   template <class F> void register_actor(const std::string& name)
   {
-    simix::register_function(name, [](std::vector<std::string> args) {
-      return simix::ActorCode([args] {
+    kernel::actor::ActorCodeFactory code_factory = [](std::vector<std::string> args) {
+      return kernel::actor::ActorCode([args] {
         F code(std::move(args));
         code();
       });
-    });
+    };
+    register_function(name, std::move(code_factory));
   }
-
   template <class F> void register_actor(const std::string& name, F code)
   {
-    simix::register_function(name, [code](std::vector<std::string> args) {
-      return simix::ActorCode([code, args] { code(std::move(args)); });
-    });
+    kernel::actor::ActorCodeFactory code_factory = [code](std::vector<std::string> args) {
+      return kernel::actor::ActorCode([code, args] { code(std::move(args)); });
+    };
+    register_function(name, std::move(code_factory));
   }
 
   void load_deployment(const std::string& deploy);
@@ -157,6 +162,10 @@ public:
    * e->set_config("host/model:ptask_L07");
    */
   void set_config(const std::string& str);
+  void set_config(const std::string& name, int value);
+  void set_config(const std::string& name, bool value);
+  void set_config(const std::string& name, double value);
+  void set_config(const std::string& name, const std::string& value);
 
   /** Callback fired when the platform is created (ie, the xml file parsed),
    * right before the actual simulation starts. */