X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/210da270d0339479db706757d8c836621bb138c9..5be6b677d03fe86873a5987f577db57c8a362ee5:/src/s4u/s4u_netzone.cpp diff --git a/src/s4u/s4u_netzone.cpp b/src/s4u/s4u_netzone.cpp index ea2f37c2c7..6aa572dc07 100644 --- a/src/s4u/s4u_netzone.cpp +++ b/src/s4u/s4u_netzone.cpp @@ -23,26 +23,25 @@ simgrid::xbt::signal(); } + void NetZone::seal() { sealed_ = true; } + NetZone::~NetZone() { - xbt_dict_cursor_t cursor = nullptr; - char* key; - NetZone_t elem; - xbt_dict_foreach (children_, cursor, key, elem) { - delete static_cast(elem); - } - - xbt_dict_free(&children_); + for (auto nz : *children_) + delete nz; + delete children_; xbt_free(name_); } + std::unordered_map* NetZone::properties() { - return simgrid::simix::kernelImmediate([=] { + return simgrid::simix::kernelImmediate([this] { return &properties_; }); } @@ -54,12 +53,12 @@ const char* NetZone::property(const char* key) } void NetZone::setProperty(const char* key, const char* value) { - simgrid::simix::kernelImmediate([=,&key,&value] { + simgrid::simix::kernelImmediate([this,key,value] { properties_[key] = value; }); } -xbt_dict_t NetZone::children() +std::vector* NetZone::children() { return children_; } @@ -72,16 +71,15 @@ NetZone* NetZone::father() return father_; } -xbt_dynar_t NetZone::hosts() +std::vector* NetZone::hosts() { - xbt_dynar_t res = xbt_dynar_new(sizeof(sg_host_t), nullptr); - - for (auto card : vertices_) { - s4u::Host* host = simgrid::s4u::Host::by_name_or_null(card->name()); - if (host != nullptr) - xbt_dynar_push(res, &host); - } - return res; + if (hosts_.empty()) // Lazy initialization + for (auto card : vertices_) { + s4u::Host* host = simgrid::s4u::Host::by_name_or_null(card->name()); + if (host != nullptr) + hosts_.push_back(host); + } + return &hosts_; } int NetZone::addComponent(kernel::routing::NetPoint* elm)