Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
naming consistency (+snake_casing)
[simgrid.git] / include / simgrid / s4u / Engine.hpp
index 767891b..a0f10cf 100644 (file)
@@ -27,7 +27,10 @@ namespace s4u {
 class XBT_PUBLIC Engine {
 public:
   /** Constructor, taking the command line parameters of your main function */
-  Engine(int* argc, char** argv);
+  explicit Engine(int* argc, char** argv);
+  /** Currently, only one instance is allowed to exist. This is why you can't copy or move it */
+  Engine(const Engine&) = delete;
+  Engine(Engine&&)      = delete;
 
   ~Engine();
   /** Finalize the default engine and all its dependencies */
@@ -82,11 +85,15 @@ public:
 
 protected:
   friend s4u::Host;
+  friend s4u::Link;
   friend s4u::Storage;
   friend kernel::routing::NetPoint;
   friend kernel::routing::NetZoneImpl;
+  friend kernel::resource::LinkImpl;
   void host_register(std::string name, simgrid::s4u::Host* host);
   void host_unregister(std::string name);
+  void link_register(std::string name, simgrid::s4u::Link* link);
+  void link_unregister(std::string name);
   void storage_register(std::string name, simgrid::s4u::Storage* storage);
   void storage_unregister(std::string name);
   void netpoint_register(simgrid::kernel::routing::NetPoint* card);
@@ -101,6 +108,13 @@ public:
 
   size_t get_link_count();
   std::vector<Link*> get_all_links();
+  std::vector<Link*> get_filtered_links(std::function<bool(Link*)> filter);
+  simgrid::s4u::Link* link_by_name(std::string name);
+  simgrid::s4u::Link* link_by_name_or_null(std::string name);
+
+  size_t get_actor_count();
+  std::vector<ActorPtr> get_all_actors();
+  std::vector<ActorPtr> get_filtered_actors(std::function<bool(ActorPtr)> filter);
 
   size_t get_storage_count();
   std::vector<Storage*> get_all_storages();
@@ -116,10 +130,10 @@ public:
   simgrid::s4u::NetZone* netzone_by_name_or_null(const char* name);
 
   /** @brief Retrieves all netzones of the type indicated by the template argument */
-  template <class T> std::vector<T*> filter_netzones_by_type()
+  template <class T> std::vector<T*> get_filtered_netzones()
   {
     std::vector<T*> res;
-    filter_netzones_by_type_recursive(get_netzone_root(), &res);
+    get_filtered_netzones_recursive(get_netzone_root(), &res);
     return res;
   }
 
@@ -228,7 +242,7 @@ public:
   XBT_ATTRIB_DEPRECATED_v323("Please use Engine::filter_netzones_by_type()") void getNetzoneByType(
       std::vector<T*>* whereto)
   {
-    filter_netzones_by_type_recursive(get_netzone_root(), whereto);
+    get_filtered_netzones_recursive(get_netzone_root(), whereto);
   }
 
   XBT_ATTRIB_DEPRECATED_v323("Please use Engine::get_instance()") static s4u::Engine* getInstance()
@@ -259,10 +273,10 @@ extern XBT_PUBLIC xbt::signal<void(double)> on_time_advance;
 /** Callback fired when the time cannot jump because of inter-actors deadlock */
 extern XBT_PUBLIC xbt::signal<void(void)> on_deadlock;
 
-template <class T> XBT_PRIVATE void filter_netzones_by_type_recursive(s4u::NetZone* current, std::vector<T*>* whereto)
+template <class T> XBT_PRIVATE void get_filtered_netzones_recursive(s4u::NetZone* current, std::vector<T*>* whereto)
 {
-  for (auto const& elem : *(current->getChildren())) {
-    filter_netzones_by_type_recursive(elem, whereto);
+  for (auto const& elem : *(current->get_children())) {
+    get_filtered_netzones_recursive(elem, whereto);
     if (elem == dynamic_cast<T*>(elem))
       whereto->push_back(dynamic_cast<T*>(elem));
   }