Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
get rid of SIMIX_clean
[simgrid.git] / src / kernel / EngineImpl.hpp
index 11c6e3d18712823af10e35a3de1f4588138c369b..3a32bc9d83513967500878ffe3b3f0a9f7857e1b 100644 (file)
@@ -67,14 +67,20 @@ class EngineImpl {
   std::vector<xbt::Task<void()>> tasksTemp;
 
   std::mutex mutex_;
+  static EngineImpl* instance_;
+
   friend s4u::Engine;
 
 public:
   EngineImpl() = default;
 
+  /* Currently, only one instance is allowed to exist. This is why you can't copy or move it */
+#ifndef DOXYGEN
   EngineImpl(const EngineImpl&) = delete;
   EngineImpl& operator=(const EngineImpl&) = delete;
   virtual ~EngineImpl();
+  static void shutdown();
+#endif
 
   void load_deployment(const std::string& file) const;
   void register_function(const std::string& name, const actor::ActorCodeFactory& code);
@@ -93,6 +99,7 @@ public:
   const std::vector<resource::Model*>& get_all_models() const { return models_; }
 
   static EngineImpl* get_instance() { return simgrid::s4u::Engine::get_instance()->pimpl; }
+
   actor::ActorCodeFactory get_function(const std::string& name)
   {
     auto res = registered_functions.find(name);
@@ -107,7 +114,7 @@ public:
   void add_actor_to_run_list_no_check(actor::ActorImpl* actor);
   void add_actor_to_destroy_list(actor::ActorImpl& actor) { actors_to_destroy_.push_back(actor); }
 
-  bool has_actors_to_run() { return not actors_to_run_.empty(); }
+  bool has_actors_to_run() const { return not actors_to_run_.empty(); }
   const actor::ActorImpl* get_first_actor_to_run() const { return actors_to_run_.front(); }
   const actor::ActorImpl* get_actor_to_run_at(unsigned long int i) const { return actors_to_run_[i]; }
   unsigned long int get_actor_to_run_count() const { return actors_to_run_.size(); }