From a9786d0c1612118b9fc2304ea7aa36b67b232267 Mon Sep 17 00:00:00 2001 From: Martin Quinson Date: Mon, 19 Dec 2016 10:22:37 +0100 Subject: [PATCH 1/1] new function: Engine::netcardList() --- include/simgrid/s4u/engine.hpp | 1 + src/s4u/s4u_engine.cpp | 9 ++++++ teshsuite/simdag/flatifier/flatifier.cpp | 41 ++++++++++++------------ teshsuite/simdag/is-router/is-router.cpp | 14 ++++---- 4 files changed, 37 insertions(+), 28 deletions(-) diff --git a/include/simgrid/s4u/engine.hpp b/include/simgrid/s4u/engine.hpp index a6ee0bda92..62b41648c8 100644 --- a/include/simgrid/s4u/engine.hpp +++ b/include/simgrid/s4u/engine.hpp @@ -74,6 +74,7 @@ public: /** @brief Retrieve the netcard of the given name (or nullptr if not found) */ simgrid::kernel::routing::NetCard* netcardByNameOrNull(const char* name); + void netcardList(std::vector * list); template void registerFunction(const char* name) diff --git a/src/s4u/s4u_engine.cpp b/src/s4u/s4u_engine.cpp index 71bf83839b..6e37df00eb 100644 --- a/src/s4u/s4u_engine.cpp +++ b/src/s4u/s4u_engine.cpp @@ -116,5 +116,14 @@ simgrid::kernel::routing::NetCard* Engine::netcardByNameOrNull(const char* name) { return static_cast(xbt_dict_get_or_null(netcards_dict, name)); } +void Engine::netcardList(std::vector* list) +{ + xbt_lib_cursor_t cursor = nullptr; + char* key; + void* data; + xbt_dict_foreach (netcards_dict, cursor, key, data) { + list->push_back(static_cast(data)); + } +} } } diff --git a/teshsuite/simdag/flatifier/flatifier.cpp b/teshsuite/simdag/flatifier/flatifier.cpp index 291feebd01..7d1b4999c3 100644 --- a/teshsuite/simdag/flatifier/flatifier.cpp +++ b/teshsuite/simdag/flatifier/flatifier.cpp @@ -14,7 +14,8 @@ #include #include -#include +#include "simgrid/s4u/engine.hpp" +#include "simgrid/s4u/host.hpp" #include @@ -72,9 +73,7 @@ int main(int argc, char **argv) unsigned int i; xbt_dict_t props = nullptr; xbt_dict_cursor_t cursor = nullptr; - xbt_lib_cursor_t cursor_src = nullptr; - xbt_lib_cursor_t cursor_dst = nullptr; - char *src,*dst,*key,*data; + char *key, *data; sg_netcard_t value1; sg_netcard_t value2; @@ -90,6 +89,9 @@ int main(int argc, char **argv) create_environment(parse_time, platformFile); + std::vector netcardList; + simgrid::s4u::Engine::instance()->netcardList(&netcardList); + if (timings) { XBT_INFO("Parsing time: %fs (%zu hosts, %d links)", xbt_os_timer_elapsed(parse_time), sg_host_count(), sg_link_count()); @@ -122,11 +124,9 @@ int main(int argc, char **argv) } // Routers - xbt_dict_foreach (netcards_dict, cursor_src, key, value1) { - if(value1->isRouter()) { - std::printf(" \n",key); - } - } + for (auto srcCard : netcardList) + if (srcCard->isRouter()) + std::printf(" \n", srcCard->cname()); // Links unsigned int totalLinks = sg_link_count(); @@ -146,12 +146,11 @@ int main(int argc, char **argv) } } - sg_host_t host1, host2; for (unsigned int it_src = 0; it_src < totalHosts; it_src++) { // Routes from host - host1 = hosts[it_src]; + simgrid::s4u::Host* host1 = hosts[it_src]; value1 = host1->pimpl_netcard; for (unsigned int it_dst = 0; it_dst < totalHosts; it_dst++) { // Routes to host - host2 = hosts[it_dst]; + simgrid::s4u::Host* host2 = hosts[it_dst]; std::vector *route = new std::vector(); value2 = host2->pimpl_netcard; simgrid::kernel::routing::NetZoneImpl::getGlobalRoute(value1, value2, route, nullptr); @@ -163,9 +162,9 @@ int main(int argc, char **argv) } delete route; } - xbt_dict_foreach (netcards_dict, cursor_dst, dst, value2) { // to router + for (auto value2 : netcardList) { // to router if(value2->isRouter()){ - std::printf(" \n ", host1->cname(), dst); + std::printf(" \n ", host1->cname(), value2->cname()); std::vector *route = new std::vector(); simgrid::kernel::routing::NetZoneImpl::getGlobalRoute(value1, value2, route, nullptr); for (auto link : *route) @@ -176,12 +175,12 @@ int main(int argc, char **argv) } } - xbt_dict_foreach (netcards_dict, cursor_src, src, value1) { // Routes from router + for (auto value1 : netcardList) { // Routes from router if (value1->isRouter()){ - xbt_dict_foreach (netcards_dict, cursor_dst, dst, value2) { // to router - if(value2->isRouter()){ - std::printf(" \n ", src, dst); - std::vector *route = new std::vector(); + for (auto value2 : netcardList) { // to router + if (value2->isRouter()) { + std::printf(" \n ", value1->cname(), value2->cname()); + std::vector* route = new std::vector(); simgrid::kernel::routing::NetZoneImpl::getGlobalRoute(value1, value2, route, nullptr); for(auto link :*route) std::printf("",link->getName()); @@ -190,8 +189,8 @@ int main(int argc, char **argv) } } for (unsigned int it_dst = 0; it_dst < totalHosts; it_dst++) { // Routes to host - host2 = hosts[it_dst]; - std::printf(" \n ", src, host2->cname()); + simgrid::s4u::Host* host2 = hosts[it_dst]; + std::printf(" \n ", value1->cname(), host2->cname()); std::vector *route = new std::vector(); value2 = host2->pimpl_netcard; simgrid::kernel::routing::NetZoneImpl::getGlobalRoute(value1, value2, route, nullptr); diff --git a/teshsuite/simdag/is-router/is-router.cpp b/teshsuite/simdag/is-router/is-router.cpp index b201d7050c..585b8ced22 100644 --- a/teshsuite/simdag/is-router/is-router.cpp +++ b/teshsuite/simdag/is-router/is-router.cpp @@ -3,6 +3,7 @@ /* 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 "simgrid/s4u/engine.hpp" #include "simgrid/s4u/host.hpp" #include "simgrid/simdag.h" #include "src/kernel/routing/NetCard.hpp" @@ -17,6 +18,9 @@ int main(int argc, char **argv) xbt_dynar_t hosts = sg_hosts_as_dynar(); printf("Host count: %zu, link number: %d\n", sg_host_count(), sg_link_count()); + std::vector netcardList; + simgrid::s4u::Engine::instance()->netcardList(&netcardList); + int it; sg_host_t host; xbt_dynar_foreach(hosts, it, host) { @@ -27,13 +31,9 @@ int main(int argc, char **argv) xbt_dynar_free(&hosts); printf("NetCards count: %d\n", xbt_dict_length(netcards_dict)); - xbt_lib_cursor_t cursor = nullptr; - char* key; - void *ignored; - xbt_dict_foreach (netcards_dict, cursor, key, ignored) { - simgrid::kernel::routing::NetCard * nc = sg_netcard_by_name_or_null(key); - printf(" - Seen: \"%s\". Type: %s\n", key, nc->isRouter() ? "router" : (nc->isNetZone() ? "netzone" : "host")); - } + for (auto nc : netcardList) + printf(" - Seen: \"%s\". Type: %s\n", nc->cname(), + nc->isRouter() ? "router" : (nc->isNetZone() ? "netzone" : "host")); SD_exit(); return 0; -- 2.20.1