X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/45e0cfcbe06707d42a1da9d2a5f4a72ba4140c8b..03e7fbe7bab4bab050435eeac609d80458e36bb7:/src/s4u/s4u_Host.cpp diff --git a/src/s4u/s4u_Host.cpp b/src/s4u/s4u_Host.cpp index 476ea1c7d9..85840a4194 100644 --- a/src/s4u/s4u_Host.cpp +++ b/src/s4u/s4u_Host.cpp @@ -28,9 +28,9 @@ simgrid::xbt::signal Host::on_destruction; simgrid::xbt::signal Host::on_state_change; simgrid::xbt::signal Host::on_speed_change; -Host::Host(const char* name) : name_(name) +Host::Host(std::string name) : name_(name) { - xbt_assert(Host::by_name_or_null(name) == nullptr, "Refusing to create a second host named '%s'.", name); + xbt_assert(Host::by_name_or_null(name) == nullptr, "Refusing to create a second host named '%s'.", name.c_str()); Engine::get_instance()->host_register(std::string(name_), this); new simgrid::surf::HostImpl(this); } @@ -68,14 +68,6 @@ Host* Host::by_name(std::string name) { return Engine::get_instance()->host_by_name(name); } -Host* Host::by_name(const char* name) -{ - return Engine::get_instance()->host_by_name(std::string(name)); -} -Host* Host::by_name_or_null(const char* name) -{ - return Engine::get_instance()->host_by_name_or_null(std::string(name)); -} Host* Host::by_name_or_null(std::string name) { return Engine::get_instance()->host_by_name_or_null(name); @@ -86,14 +78,14 @@ Host* Host::current() smx_actor_t smx_proc = SIMIX_process_self(); if (smx_proc == nullptr) xbt_die("Cannot call Host::current() from the maestro context"); - return smx_proc->host; + return smx_proc->host_; } void Host::turn_on() { if (is_off()) { simgrid::simix::simcall([this] { - this->extension()->turnOn(); + this->pimpl_->turn_on(); this->pimpl_cpu->turn_on(); on_state_change(*this); }); @@ -104,22 +96,9 @@ void Host::turn_on() void Host::turn_off() { if (is_on()) { - smx_actor_t self = SIMIX_process_self(); - simgrid::simix::simcall([this, self] { - simgrid::simix::Host* host = this->extension(); - - xbt_assert((host != nullptr), "Invalid parameters"); - + simgrid::simix::simcall([this] { this->pimpl_cpu->turn_off(); - - /* Clean Simulator data */ - if (not host->process_list.empty()) { - for (auto& process : host->process_list) { - SIMIX_process_kill(&process, self); - XBT_DEBUG("Killing %s@%s on behalf of %s which turned off that host.", process.get_cname(), - process.host->get_cname(), self->get_cname()); - } - } + this->pimpl_->turn_off(); on_state_change(*this); }); @@ -143,32 +122,29 @@ int Host::get_pstate_count() const */ std::vector Host::get_all_actors() { - std::vector res; - for (auto& actor : this->extension()->process_list) - res.push_back(actor.ciface()); - return res; + return pimpl_->get_all_actors(); } /** @brief Returns how many actors (daemonized or not) have been launched on this host */ int Host::get_actor_count() { - return this->extension()->process_list.size(); + return pimpl_->get_actor_count(); } /** @deprecated */ void Host::getProcesses(std::vector* list) { - for (auto& actor : this->extension()->process_list) { - list->push_back(actor.iface()); - } + auto actors = get_all_actors(); + for (auto& actor : actors) + list->push_back(actor); } /** @deprecated */ void Host::actorList(std::vector* whereto) { - for (auto& actor : this->extension()->process_list) { - whereto->push_back(actor.ciface()); - } + auto actors = get_all_actors(); + for (auto& actor : actors) + whereto->push_back(actor); } /** @@ -210,7 +186,7 @@ std::unordered_map* Host::get_properties() } /** Retrieve the property value (or nullptr if not set) */ -const char* Host::get_property(const char* key) const +const char* Host::get_property(std::string key) const { return this->pimpl_->get_property(key); } @@ -635,14 +611,13 @@ void sg_host_dump(sg_host_t host) */ void sg_host_get_actor_list(sg_host_t host, xbt_dynar_t whereto) { - for (auto& actor : host->extension()->process_list) { - s4u_Actor* p = actor.ciface(); - xbt_dynar_push(whereto, &p); - } + auto actors = host->get_all_actors(); + for (auto& actor : actors) + xbt_dynar_push(whereto, &actor); } sg_host_t sg_host_self() { smx_actor_t process = SIMIX_process_self(); - return (process == nullptr) ? nullptr : process->host; + return (process == nullptr) ? nullptr : process->host_; }