Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
fix MC builds
[simgrid.git] / src / s4u / s4u_host.cpp
index 56229fe..e7a2c0c 100644 (file)
@@ -20,7 +20,7 @@
 #include "simgrid/s4u/host.hpp"
 #include "simgrid/s4u/storage.hpp"
 
-xbt_dict_t host_list = nullptr; // FIXME: move it to Engine
+std::unordered_map<std::string, simgrid::s4u::Host*> host_list; // FIXME: move it to Engine
 
 int MSG_HOST_LEVEL = -1;
 int USER_HOST_LEVEL = -1;
@@ -41,7 +41,7 @@ Host::Host(const char* name)
   : name_(name)
 {
   xbt_assert(sg_host_by_name(name) == nullptr, "Refusing to create a second host named '%s'.", name);
-  xbt_dict_set(host_list, name, this, nullptr);
+  host_list[name_] = this;
 }
 
 Host::~Host()
@@ -66,25 +66,21 @@ void Host::destroy()
 {
   if (!currentlyDestroying_) {
     currentlyDestroying_ = true;
-    xbt_dict_remove(host_list, name().c_str());
     onDestruction(*this);
+    host_list.erase(name_);
     delete this;
   }
 }
 
 Host* Host::by_name(std::string name)
 {
-  Host* host = Host::by_name_or_null(name.c_str());
-  // TODO, raise an exception instead?
-  if (host == nullptr)
-    xbt_die("No such host: '%s'", name.c_str());
-  return host;
+  return host_list.at(name); // Will raise a std::out_of_range if the host does not exist
 }
 Host* Host::by_name_or_null(const char* name)
 {
-  if (host_list == nullptr)
-    host_list = xbt_dict_new_homogeneous(nullptr);
-  return (Host*) xbt_dict_get_or_null(host_list, name);
+  if (host_list.find(name) == host_list.end())
+    return nullptr;
+  return host_list.at(name);
 }
 
 Host *Host::current(){
@@ -98,7 +94,7 @@ void Host::turnOn() {
   if (isOff()) {
     simgrid::simix::kernelImmediate([&]{
       this->extension<simgrid::simix::Host>()->turnOn();
-      this->pimpl_->turnOn();
+      this->pimpl_cpu->turnOn();
     });
   }
 }
@@ -137,9 +133,7 @@ boost::unordered_map<std::string, Storage*> const& Host::mountedStorages() {
 
 /** Get the properties assigned to a host */
 xbt_dict_t Host::properties() {
-  return simgrid::simix::kernelImmediate([&] {
-    return this->pimpl_->getProperties();
-  });
+  return simgrid::simix::kernelImmediate([&] { return this->pimpl_->getProperties(); });
 }
 
 /** Retrieve the property value (or nullptr if not set) */
@@ -147,9 +141,7 @@ const char*Host::property(const char*key) {
   return this->pimpl_->getProperty(key);
 }
 void Host::setProperty(const char*key, const char *value){
-  simgrid::simix::kernelImmediate([&] {
-    this->pimpl_->setProperty(key,value);
-  });
+  simgrid::simix::kernelImmediate([&] { this->pimpl_->setProperty(key, value); });
 }
 
 /** Get the processes attached to the host */
@@ -198,20 +190,6 @@ int Host::pstate()
   return pimpl_cpu->getPState();
 }
 
-void Host::parameters(vm_params_t params)
-{
-  simgrid::simix::kernelImmediate([&]() {
-    this->pimpl_->getParams(params);
-  });
-}
-
-void Host::setParameters(vm_params_t params)
-{
-  simgrid::simix::kernelImmediate([&]() {
-    this->pimpl_->setParams(params);
-  });
-}
-
 /**
  * \ingroup simix_storage_management
  * \brief Returns the list of storages mounted on an host.
@@ -219,9 +197,7 @@ void Host::setParameters(vm_params_t params)
  */
 xbt_dict_t Host::mountedStoragesAsDict()
 {
-  return simgrid::simix::kernelImmediate([&] {
-    return this->pimpl_->getMountedStorageList();
-  });
+  return simgrid::simix::kernelImmediate([&] { return this->pimpl_->getMountedStorageList(); });
 }
 
 /**
@@ -231,9 +207,7 @@ xbt_dict_t Host::mountedStoragesAsDict()
  */
 xbt_dynar_t Host::attachedStorages()
 {
-  return simgrid::simix::kernelImmediate([&] {
-    return this->pimpl_->getAttachedStorageList();
-  });
+  return simgrid::simix::kernelImmediate([&] { return this->pimpl_->getAttachedStorageList(); });
 }
 
 } // namespace simgrid