Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Fix MR74, workaround for s4u-network-ns3-wifi
[simgrid.git] / src / kernel / EngineImpl.hpp
index febb9db3d0bf280272b64b481912f25121a08144..2fcab66f61d4cd1b5d7eebb7863eeb86e96c91ac 100644 (file)
@@ -31,6 +31,9 @@
 
 namespace simgrid {
 namespace kernel {
+// In MC mode, the application sends these pointers to the MC
+xbt_dynar_t get_actors_addr();
+xbt_dynar_t get_dead_actors_addr();
 
 class EngineImpl {
   std::map<std::string, s4u::Host*, std::less<>> hosts_;
@@ -91,17 +94,13 @@ public:
   void initialize(int* argc, char** argv);
   void load_platform(const std::string& platf);
   void load_deployment(const std::string& file) const;
+  void seal_platform() const;
   void register_function(const std::string& name, const actor::ActorCodeFactory& code);
   void register_default(const actor::ActorCodeFactory& code);
 
   bool is_maestro(const actor::ActorImpl* actor) const { return actor == maestro_; }
   void set_maestro(actor::ActorImpl* actor) { maestro_ = actor; }
   actor::ActorImpl* get_maestro() const { return maestro_; }
-  void destroy_maestro()
-  {
-    delete maestro_;
-    maestro_ = nullptr;
-  }
 
   context::ContextFactory* get_context_factory() const { return context_factory_; }
   void set_context_factory(context::ContextFactory* factory) { context_factory_ = factory; }
@@ -112,7 +111,7 @@ public:
     context_factory_ = nullptr;
   }
 
-  void context_mod_init();
+  void context_mod_init() const;
   /**
    * @brief Add a model to engine list
    *
@@ -184,8 +183,26 @@ public:
   void display_all_actor_status() const;
   void run_all_actors();
 
-  /** @brief Run the main simulation loop. */
-  void run();
+  /*  @brief Finish simulation initialization
+   *  This function must be called before the first call to solve()
+   */
+  void presolve() const;
+  /** @brief Performs a part of the simulation
+   *  @param max_date Maximum date to update the simulation to, or -1
+   *  @return the elapsed time, or -1.0 if no event could be executed
+   *
+   *  This function execute all possible events, update the action states  and returns the time elapsed.
+   *  When you call execute or communicate on a model, the corresponding actions are not executed immediately but only
+   *  when you call solve().
+   *  Note that the returned elapsed time can be zero.
+   */
+  double solve(double max_date) const;
+
+  /** @brief Run the main simulation loop until the specified date (or infinitly if max_date is negative). */
+  void run(double max_date);
+
+  /** @brief Return the current time in milliseconds. */
+  static double get_clock();
 };
 
 } // namespace kernel