X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/d7137248837c462e9a20c5640f2c74541faa7ef5..7a955948edf1a0c37594d87693315dfc2dac9a8f:/src/kernel/routing/NetZoneImpl.cpp diff --git a/src/kernel/routing/NetZoneImpl.cpp b/src/kernel/routing/NetZoneImpl.cpp index e19d3ce705..006d375c43 100644 --- a/src/kernel/routing/NetZoneImpl.cpp +++ b/src/kernel/routing/NetZoneImpl.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2006-2018. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2006-2019. 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. */ @@ -26,22 +26,71 @@ public: std::vector links; }; -NetZoneImpl::NetZoneImpl(NetZone* father, std::string name) : NetZone(father, name) +NetZoneImpl::NetZoneImpl(NetZoneImpl* father, std::string name, resource::NetworkModel* network_model) + : network_model_(network_model), piface_(this), father_(father), name_(name) { xbt_assert(nullptr == simgrid::s4u::Engine::get_instance()->netpoint_by_name_or_null(name.c_str()), "Refusing to create a second NetZone called '%s'.", name.c_str()); - netpoint_ = new NetPoint(name, NetPoint::Type::NetZone, static_cast(father)); + netpoint_ = new NetPoint(name, NetPoint::Type::NetZone, father); XBT_DEBUG("NetZone '%s' created with the id '%u'", name.c_str(), netpoint_->id()); } NetZoneImpl::~NetZoneImpl() { + for (auto const& nz : children_) + delete nz; + for (auto const& kv : bypass_routes_) delete kv.second; simgrid::s4u::Engine::get_instance()->netpoint_unregister(netpoint_); } +const char* NetZoneImpl::get_cname() const +{ + return name_.c_str(); +} +NetZoneImpl* NetZoneImpl::get_father() +{ + return father_; +} +void NetZoneImpl::seal() +{ + sealed_ = true; +} +/** @brief Returns the list of direct children (no grand-children) + * + * This returns the internal data, no copy. Don't mess with it. + */ +std::vector* NetZoneImpl::get_children() +{ + return &children_; +} +/** @brief Returns the list of the hosts found in this NetZone (not recursively) + * + * Only the hosts that are directly contained in this NetZone are retrieved, + * not the ones contained in sub-netzones. + */ +std::vector NetZoneImpl::get_all_hosts() +{ + std::vector res; + for (auto const& card : get_vertices()) { + s4u::Host* host = simgrid::s4u::Host::by_name_or_null(card->get_name()); + if (host != nullptr) + res.push_back(host); + } + return res; +} +int NetZoneImpl::get_host_count() +{ + int count = 0; + for (auto const& card : get_vertices()) { + s4u::Host* host = simgrid::s4u::Host::by_name_or_null(card->get_name()); + if (host != nullptr) + count++; + } + return count; +} simgrid::s4u::Host* NetZoneImpl::create_host(const char* name, std::vector* speedPerPstate, int coreAmount, std::map* props) @@ -64,6 +113,18 @@ simgrid::s4u::Host* NetZoneImpl::create_host(const char* name, std::vector& /*link_list*/, bool /*symmetrical*/) +{ + xbt_die("NetZone '%s' does not accept new routes (wrong class).", name_.c_str()); +} + void NetZoneImpl::add_bypass_route(NetPoint* src, NetPoint* dst, NetPoint* gw_src, NetPoint* gw_dst, std::vector& link_list, bool symmetrical) { @@ -230,7 +291,7 @@ bool NetZoneImpl::get_bypass_route(routing::NetPoint* src, routing::NetPoint* ds /* (1) find the path to the root routing component */ std::vector path_src; - NetZone* current = src->get_englobing_zone(); + NetZoneImpl* current = src->get_englobing_zone(); while (current != nullptr) { path_src.push_back(static_cast(current)); current = current->father_;