Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Make EngineImpl::tasksTemp a local variable.
[simgrid.git] / src / kernel / EngineImpl.hpp
index 11c6e3d..b448c06 100644 (file)
@@ -19,6 +19,7 @@
 #include "src/kernel/activity/SleepImpl.hpp"
 #include "src/kernel/activity/SynchroRaw.hpp"
 #include "src/kernel/actor/ActorImpl.hpp"
+#include "src/surf/SplitDuplexLinkImpl.hpp"
 
 #include <boost/intrusive/list.hpp>
 #include <map>
@@ -34,6 +35,9 @@ namespace kernel {
 class EngineImpl {
   std::map<std::string, s4u::Host*, std::less<>> hosts_;
   std::map<std::string, resource::LinkImpl*, std::less<>> links_;
+  /* save split-duplex links separately, keep links_ with only LinkImpl* seen by the user
+   * members of a split-duplex are saved in the links_ */
+  std::map<std::string, std::unique_ptr<resource::SplitDuplexLinkImpl>, std::less<>> split_duplex_links_;
   std::unordered_map<std::string, routing::NetPoint*> netpoints_;
   std::unordered_map<std::string, activity::MailboxImpl*> mailboxes_;
 
@@ -64,9 +68,9 @@ class EngineImpl {
 #endif
 
   std::vector<xbt::Task<void()>> tasks;
-  std::vector<xbt::Task<void()>> tasksTemp;
 
   std::mutex mutex_;
+  std::unique_ptr<void, std::function<int(void*)>> platf_handle_; //!< handle for platform library
   friend s4u::Engine;
 
 public:
@@ -76,6 +80,7 @@ public:
   EngineImpl& operator=(const EngineImpl&) = delete;
   virtual ~EngineImpl();
 
+  void load_platform(const std::string& platf);
   void load_deployment(const std::string& file) const;
   void register_function(const std::string& name, const actor::ActorCodeFactory& code);
   void register_default(const actor::ActorCodeFactory& code);
@@ -107,7 +112,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(); }
@@ -115,6 +120,7 @@ public:
   actor::ActorImpl* get_actor_by_pid(aid_t pid);
   void add_actor(aid_t pid, actor::ActorImpl* actor) { actor_list_[pid] = actor; }
   void remove_actor(aid_t pid) { actor_list_.erase(pid); }
+  void add_split_duplex_link(const std::string& name, std::unique_ptr<resource::SplitDuplexLinkImpl> link);
 
 #if SIMGRID_HAVE_MC
   xbt_dynar_t get_actors_vector() const { return actors_vector_; }