X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/15120cbae733cd144328bd4610dc6091ae6b7bd8..4c1f0785858b31028eb208c42a33b30b9ec48676:/src/s4u/s4u_Host.cpp diff --git a/src/s4u/s4u_Host.cpp b/src/s4u/s4u_Host.cpp index f2549c6033..bfe5c6726d 100644 --- a/src/s4u/s4u_Host.cpp +++ b/src/s4u/s4u_Host.cpp @@ -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& properties) +Host* Host::set_properties(const std::unordered_map& 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 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); });