X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/210da270d0339479db706757d8c836621bb138c9..5bc3597e1513c7b94497ae0ea819e5fa2e28058a:/src/s4u/s4u_netzone.cpp diff --git a/src/s4u/s4u_netzone.cpp b/src/s4u/s4u_netzone.cpp index ea2f37c2c7..0dc3a43ffb 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 @@ -20,68 +20,65 @@ simgrid::xbt::signal* link_list)> NetZone::onRouteCreation; +simgrid::xbt::signal NetZone::onCreation; +simgrid::xbt::signal NetZone::onSeal; -NetZone::NetZone(NetZone* father, const char* name) : father_(father), name_(xbt_strdup(name)) +NetZone::NetZone(NetZone* father, std::string name) : father_(father), name_(name) { + children_ = new std::vector(); } + 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_); - xbt_free(name_); + for (auto const& nz : *children_) + delete nz; + delete children_; } -std::unordered_map* NetZone::properties() + +std::unordered_map* NetZone::getProperties() { - return simgrid::simix::kernelImmediate([=] { + return simgrid::simix::kernelImmediate([this] { return &properties_; }); } /** Retrieve the property value (or nullptr if not set) */ -const char* NetZone::property(const char* key) +const char* NetZone::getProperty(const char* key) { return properties_.at(key).c_str(); } 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::getChildren() { return children_; } -char* NetZone::name() +const char* NetZone::getCname() { - return name_; + return name_.c_str(); } -NetZone* NetZone::father() +NetZone* NetZone::getFather() { return father_; } -xbt_dynar_t NetZone::hosts() +void NetZone::getHosts(std::vector* whereto) { - xbt_dynar_t res = xbt_dynar_new(sizeof(sg_host_t), nullptr); - - for (auto card : vertices_) { + for (auto const& card : vertices_) { s4u::Host* host = simgrid::s4u::Host::by_name_or_null(card->name()); if (host != nullptr) - xbt_dynar_push(res, &host); + whereto->push_back(host); } - return res; } int NetZone::addComponent(kernel::routing::NetPoint* elm) @@ -92,7 +89,7 @@ int NetZone::addComponent(kernel::routing::NetPoint* elm) void NetZone::addRoute(sg_platf_route_cbarg_t /*route*/) { - xbt_die("NetZone '%s' does not accept new routes (wrong class).", name_); + xbt_die("NetZone '%s' does not accept new routes (wrong class).", name_.c_str()); } } }; // namespace simgrid::s4u