X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/69b64311b67fddc105da16faded6fecec9db45d3..19b3962253112b19308537bc2400de141c119d99:/src/s4u/s4u_netzone.cpp diff --git a/src/s4u/s4u_netzone.cpp b/src/s4u/s4u_netzone.cpp index 153be093f9..17035d2189 100644 --- a/src/s4u/s4u_netzone.cpp +++ b/src/s4u/s4u_netzone.cpp @@ -1,12 +1,12 @@ -/* Copyright (c) 2006-2016. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2006-2017. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #include "xbt/log.h" +#include "simgrid/s4u/Host.hpp" #include "simgrid/s4u/NetZone.hpp" -#include "simgrid/s4u/host.hpp" #include "simgrid/simix.hpp" #include "src/kernel/routing/NetPoint.hpp" #include "src/surf/network_interface.hpp" // Link FIXME: move to proper header @@ -23,29 +23,22 @@ simgrid::xbt::signalname()); - if (host != nullptr) - hosts_->push_back(host); - } + children_ = new std::vector(); } void NetZone::seal() { sealed_ = true; } + NetZone::~NetZone() { - xbt_dict_cursor_t cursor = nullptr; - char* key; - NetZone* 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([this] { @@ -65,7 +58,7 @@ void NetZone::setProperty(const char* key, const char* value) }); } -xbt_dict_t NetZone::children() +std::vector* NetZone::children() { return children_; } @@ -80,7 +73,13 @@ NetZone* NetZone::father() std::vector* NetZone::hosts() { - return hosts_; + 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)