X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/eadbe829389f23151f79257824f3164d7801bbc7..c5652f475d35a3d6505bed5102ac5162e19044a2:/src/s4u/s4u_Host.cpp diff --git a/src/s4u/s4u_Host.cpp b/src/s4u/s4u_Host.cpp index 318727b216..46d86bbf9e 100644 --- a/src/s4u/s4u_Host.cpp +++ b/src/s4u/s4u_Host.cpp @@ -10,6 +10,7 @@ #include "src/simix/smx_private.hpp" #include "src/surf/HostImpl.hpp" +#include #include XBT_LOG_NEW_DEFAULT_SUBCATEGORY(s4u_host, s4u, "Logging specific to the S4U hosts"); @@ -131,22 +132,6 @@ int Host::get_actor_count() return pimpl_->get_actor_count(); } -/** @deprecated */ -void Host::getProcesses(std::vector* list) -{ - auto actors = get_all_actors(); - for (auto& actor : actors) - list->push_back(actor); -} - -/** @deprecated */ -void Host::actorList(std::vector* whereto) -{ - auto actors = get_all_actors(); - for (auto& actor : actors) - whereto->push_back(actor); -} - /** * @brief Find a route toward another host * @@ -180,9 +165,9 @@ void Host::route_to(Host* dest, std::vector& links, } /** Get the properties assigned to a host */ -std::unordered_map* Host::get_properties() +const std::unordered_map* Host::get_properties() const { - return simix::simcall([this] { return this->pimpl_->get_properties(); }); + return this->pimpl_->get_properties(); } /** Retrieve the property value (or nullptr if not set) */ @@ -195,6 +180,12 @@ void Host::set_property(const std::string& key, const std::string& value) { simix::simcall([this, &key, &value] { this->pimpl_->set_property(key, value); }); } + +void Host::set_properties(const std::map& properties) +{ + simix::simcall([this, &properties] { this->pimpl_->set_properties(properties); }); +} + /** Specify a profile turning the host on and off according to a exhaustive list or a stochastic law. * The profile must contain boolean values. */ void Host::set_state_profile(kernel::profile::Profile* p) @@ -215,7 +206,7 @@ void Host::set_speed_profile(kernel::profile::Profile* p) /** @brief Get the peak processor speed (in flops/s), at the specified pstate */ double Host::get_pstate_speed(int pstate_index) const { - return simix::simcall([this, pstate_index] { return this->pimpl_cpu->get_pstate_peak_speed(pstate_index); }); + return this->pimpl_cpu->get_pstate_peak_speed(pstate_index); } /** @brief Get the peak computing speed in flops/s at the current pstate, NOT taking the external load into account. @@ -282,13 +273,6 @@ std::vector Host::get_attached_storages() const return simix::simcall([this] { return this->pimpl_->get_attached_storages(); }); } -void Host::getAttachedStorages(std::vector* storages) -{ - std::vector local_storages = simix::simcall([this] { return this->pimpl_->get_attached_storages(); }); - for (auto elm : local_storages) - storages->push_back(elm); -} - std::unordered_map const& Host::get_mounted_storages() { if (mounts_ == nullptr) { @@ -338,7 +322,7 @@ sg_host_t* sg_host_list() xbt_assert(sg_host_count() > 0, "There is no host!"); std::vector hosts = simgrid::s4u::Engine::get_instance()->get_all_hosts(); - sg_host_t* res = (sg_host_t*)malloc(sizeof(sg_host_t) * hosts.size()); + sg_host_t* res = xbt_new(sg_host_t, hosts.size()); memcpy(res, hosts.data(), sizeof(sg_host_t) * hosts.size()); return res; @@ -366,19 +350,16 @@ sg_host_t sg_host_by_name(const char* name) xbt_dynar_t sg_hosts_as_dynar() { - xbt_dynar_t res = xbt_dynar_new(sizeof(sg_host_t), nullptr); - std::vector list = simgrid::s4u::Engine::get_instance()->get_all_hosts(); - for (auto const& host : list) { - if (host && host->pimpl_netpoint && host->pimpl_netpoint->is_host()) - xbt_dynar_push(res, &host); - } - xbt_dynar_sort(res, [](const void* pa, const void* pb) { - const std::string& na = (*static_cast(pa))->get_name(); - const std::string& nb = (*static_cast(pb))->get_name(); - return na.compare(nb); + auto last = std::remove_if(begin(list), end(list), [](const simgrid::s4u::Host* host) { + return not host || not host->pimpl_netpoint || not host->pimpl_netpoint->is_host(); }); + std::sort(begin(list), last, + [](const simgrid::s4u::Host* a, const simgrid::s4u::Host* b) { return a->get_name() < b->get_name(); }); + + xbt_dynar_t res = xbt_dynar_new(sizeof(sg_host_t), nullptr); + std::for_each(begin(list), last, [res](sg_host_t host) { xbt_dynar_push_as(res, sg_host_t, host); }); return res; } @@ -530,7 +511,7 @@ int sg_host_is_off(sg_host_t host) xbt_dict_t sg_host_get_properties(sg_host_t host) { xbt_dict_t as_dict = xbt_dict_new_homogeneous(xbt_free_f); - std::unordered_map* props = host->get_properties(); + const std::unordered_map* props = host->get_properties(); if (props == nullptr) return nullptr; for (auto const& elm : *props) { @@ -609,7 +590,7 @@ void sg_host_dump(sg_host_t host) XBT_INFO("Displaying host %s", host->get_cname()); XBT_INFO(" - speed: %.0f", host->get_speed()); XBT_INFO(" - available speed: %.2f", sg_host_get_available_speed(host)); - std::unordered_map* props = host->get_properties(); + const std::unordered_map* props = host->get_properties(); if (not props->empty()) { XBT_INFO(" - properties:");