Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
store kernel-level objects in EngineImpl
authorFrederic Suter <frederic.suter@cc.in2p3.fr>
Thu, 14 Nov 2019 10:00:12 +0000 (11:00 +0100)
committerFrederic Suter <frederic.suter@cc.in2p3.fr>
Thu, 14 Nov 2019 10:00:12 +0000 (11:00 +0100)
src/kernel/EngineImpl.cpp
src/kernel/EngineImpl.hpp
src/s4u/s4u_Engine.cpp

index 9a44225..fcd5140 100644 (file)
@@ -34,11 +34,11 @@ EngineImpl::~EngineImpl()
 
   for (auto const& kv : storages_)
     if (kv.second)
-      kv.second->get_impl()->destroy();
+      kv.second->destroy();
 
   for (auto const& kv : links_)
     if (kv.second)
-      kv.second->get_impl()->destroy();
+      kv.second->destroy();
 }
 
 void EngineImpl::load_deployment(const std::string& file)
index cdef002..c45e02f 100644 (file)
@@ -14,8 +14,8 @@ namespace kernel {
 
 class EngineImpl {
   std::map<std::string, s4u::Host*> hosts_;
-  std::map<std::string, s4u::Link*> links_;
-  std::map<std::string, s4u::Storage*> storages_;
+  std::map<std::string, resource::LinkImpl*> links_;
+  std::map<std::string, resource::StorageImpl*> storages_;
   std::unordered_map<std::string, routing::NetPoint*> netpoints_;
   friend s4u::Engine;
 
index de8004e..c4b8905 100644 (file)
@@ -18,6 +18,7 @@
 #include "src/instr/instr_private.hpp"
 #include "src/kernel/EngineImpl.hpp"
 #include "src/simix/smx_private.hpp" // For access to simix_global->process_list
+#include "src/surf/StorageImpl.hpp"
 #include "src/surf/network_interface.hpp"
 #include "surf/surf.hpp" // routing_platf. FIXME:KILLME. SOON
 #include <simgrid/Exception.hpp>
@@ -187,19 +188,19 @@ Link* Engine::link_by_name(const std::string& name)
   if (pimpl->links_.find(name) == pimpl->links_.end())
     throw std::invalid_argument(std::string("Link not found: ") + name);
 
-  return pimpl->links_.at(name);
+  return pimpl->links_.at(name)->get_iface();
 }
 
 /** @brief Find an link from its name (or nullptr if that link does not exist) */
 Link* Engine::link_by_name_or_null(const std::string& name)
 {
   auto link = pimpl->links_.find(name);
-  return link == pimpl->links_.end() ? nullptr : link->second;
+  return link == pimpl->links_.end() ? nullptr : link->second->get_iface();
 }
 
 void Engine::link_register(const std::string& name, Link* link)
 {
-  pimpl->links_[name] = link;
+  pimpl->links_[name] = link->get_impl();
 }
 
 void Engine::link_unregister(const std::string& name)
@@ -218,7 +219,7 @@ std::vector<Storage*> Engine::get_all_storages()
 {
   std::vector<Storage*> res;
   for (auto const& kv : pimpl->storages_)
-    res.push_back(kv.second);
+    res.push_back(kv.second->get_iface());
   return res;
 }
 
@@ -231,19 +232,19 @@ Storage* Engine::storage_by_name(const std::string& name)
   if (pimpl->storages_.find(name) == pimpl->storages_.end())
     throw std::invalid_argument(std::string("Storage not found: ") + name);
 
-  return pimpl->storages_.at(name);
+  return pimpl->storages_.at(name)->get_iface();
 }
 
 /** @brief Find a storage from its name (or nullptr if that storage does not exist) */
 Storage* Engine::storage_by_name_or_null(const std::string& name)
 {
   auto storage = pimpl->storages_.find(name);
-  return storage == pimpl->storages_.end() ? nullptr : storage->second;
+  return storage == pimpl->storages_.end() ? nullptr : storage->second->get_iface();
 }
 
 void Engine::storage_register(const std::string& name, Storage* storage)
 {
-  pimpl->storages_[name] = storage;
+  pimpl->storages_[name] = storage->get_impl();
 }
 
 void Engine::storage_unregister(const std::string& name)
@@ -262,16 +263,18 @@ std::vector<Link*> Engine::get_all_links()
 {
   std::vector<Link*> res;
   for (auto const& kv : pimpl->links_)
-    res.push_back(kv.second);
+    res.push_back(kv.second->get_iface());
   return res;
 }
 
 std::vector<Link*> Engine::get_filtered_links(const std::function<bool(Link*)>& filter)
 {
   std::vector<Link*> filtered_list;
-  for (auto const& kv : pimpl->links_)
-    if (filter(kv.second))
-      filtered_list.push_back(kv.second);
+  for (auto const& kv : pimpl->links_) {
+    Link* l = kv.second->get_iface();
+    if (filter(l))
+      filtered_list.push_back(l);
+  }
   return filtered_list;
 }