Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
more fluent version
[simgrid.git] / src / s4u / s4u_Host.cpp
index f2549c60339f592984ab35c60a1fb8c8745e4a55..bfe5c6726dbff5af839f83f588083a3f00007759 100644 (file)
@@ -37,10 +37,14 @@ Host::Host(const std::string& name) : name_(name)
   new surf::HostImpl(this);
 }
 
-Host::~Host()
+Host* Host::set_netpoint(kernel::routing::NetPoint* netpoint)
 {
-  xbt_assert(currently_destroying_, "Please call h->destroy() instead of manually deleting it.");
+  pimpl_netpoint_ = netpoint;
+  return this;
+}
 
+Host::~Host()
+{
   delete pimpl_;
   if (pimpl_netpoint_ != nullptr) // not removed yet by a children class
     Engine::get_instance()->netpoint_unregister(pimpl_netpoint_);
@@ -56,12 +60,9 @@ Host::~Host()
  */
 void Host::destroy()
 {
-  if (not currently_destroying_) {
-    currently_destroying_ = true;
-    on_destruction(*this);
-    Engine::get_instance()->host_unregister(std::string(name_));
-    delete this;
-  }
+  on_destruction(*this);
+  Engine::get_instance()->host_unregister(std::string(name_));
+  delete this;
 }
 
 Host* Host::by_name(const std::string& name)
@@ -197,14 +198,16 @@ const char* Host::get_property(const std::string& key) const
   return this->pimpl_->get_property(key);
 }
 
-void Host::set_property(const std::string& key, const std::string& value)
+Host* Host::set_property(const std::string& key, const std::string& value)
 {
   kernel::actor::simcall([this, &key, &value] { this->pimpl_->set_property(key, value); });
+  return this;
 }
 
-void Host::set_properties(const std::unordered_map<std::string, std::string>& properties)
+Host* Host::set_properties(const std::unordered_map<std::string, std::string>& properties)
 {
   kernel::actor::simcall([this, &properties] { this->pimpl_->set_properties(properties); });
+  return this;
 }
 
 /** Specify a profile turning the host on and off according to an exhaustive list or a stochastic law.
@@ -264,6 +267,11 @@ std::vector<Disk*> Host::get_disks() const
   return kernel::actor::simcall([this] { return this->pimpl_->get_disks(); });
 }
 
+Disk* Host::create_disk(const std::string& name, double read_bandwidth, double write_bandwidth)
+{
+  return surf_disk_model->create_disk(name, read_bandwidth, write_bandwidth)->set_host(this)->get_iface();
+}
+
 void Host::add_disk(const Disk* disk)
 {
   kernel::actor::simcall([this, disk] { this->pimpl_->add_disk(disk); });