From aa3426ffe35e9f09e17b5f09ee1264263b0a61b4 Mon Sep 17 00:00:00 2001 From: Martin Quinson Date: Sat, 15 Oct 2016 00:20:12 +0200 Subject: [PATCH] make As->father_ protected --- include/simgrid/s4u/As.hpp | 6 +-- src/kernel/routing/AsCluster.cpp | 8 ++-- src/kernel/routing/AsCluster.hpp | 2 +- src/kernel/routing/AsClusterDragonfly.cpp | 4 +- src/kernel/routing/AsClusterDragonfly.hpp | 2 +- src/kernel/routing/AsClusterFatTree.cpp | 3 +- src/kernel/routing/AsClusterFatTree.hpp | 2 +- src/kernel/routing/AsClusterTorus.cpp | 4 +- src/kernel/routing/AsClusterTorus.hpp | 2 +- src/kernel/routing/AsDijkstra.cpp | 3 +- src/kernel/routing/AsDijkstra.hpp | 2 +- src/kernel/routing/AsFloyd.cpp | 3 +- src/kernel/routing/AsFloyd.hpp | 2 +- src/kernel/routing/AsFull.cpp | 5 +-- src/kernel/routing/AsFull.hpp | 3 +- src/kernel/routing/AsImpl.cpp | 13 ++++--- src/kernel/routing/AsImpl.hpp | 2 +- src/kernel/routing/AsNone.cpp | 3 +- src/kernel/routing/AsNone.hpp | 2 +- src/kernel/routing/AsRoutedGraph.cpp | 5 +-- src/kernel/routing/AsRoutedGraph.hpp | 2 +- src/kernel/routing/AsVivaldi.cpp | 3 +- src/kernel/routing/AsVivaldi.hpp | 2 +- src/s4u/s4u_as.cpp | 5 +-- src/surf/sg_platf.cpp | 45 ++++++++++++++++------- 25 files changed, 72 insertions(+), 61 deletions(-) diff --git a/include/simgrid/s4u/As.hpp b/include/simgrid/s4u/As.hpp index 7de5a3642c..6758f4e19a 100644 --- a/include/simgrid/s4u/As.hpp +++ b/include/simgrid/s4u/As.hpp @@ -40,7 +40,7 @@ XBT_PUBLIC_CLASS As { protected: friend simgrid::kernel::routing::AsImpl; - explicit As(const char *name); + explicit As(As * father, const char* name); virtual ~As(); public: @@ -49,9 +49,8 @@ public: char *name(); As *father();; xbt_dict_t children(); // Sub AS - xbt_dynar_t hosts(); // my content + xbt_dynar_t hosts(); // my content as a dynar - As *father_ = nullptr; // FIXME: hide me public: /* Add content to the AS, at parsing time. It should be sealed afterward. */ virtual int addComponent(kernel::routing::NetCard *elm); /* A host, a router or an AS, whatever */ @@ -59,6 +58,7 @@ public: void addBypassRoute(sg_platf_route_cbarg_t e_route); protected: + As* father_ = nullptr; char *name_ = nullptr; xbt_dict_t children_ = xbt_dict_new_homogeneous(nullptr); // sub-ASes std::vector vertices_; // our content, as known to our graph routing algorithm (maps vertexId -> vertex) diff --git a/src/kernel/routing/AsCluster.cpp b/src/kernel/routing/AsCluster.cpp index 011725aa2c..339ae8e966 100644 --- a/src/kernel/routing/AsCluster.cpp +++ b/src/kernel/routing/AsCluster.cpp @@ -14,10 +14,10 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_route_cluster, surf, "Routing part of surf" namespace simgrid { namespace kernel { namespace routing { - AsCluster::AsCluster(const char*name) - : AsImpl(name) - {} - AsCluster::~AsCluster()=default; +AsCluster::AsCluster(As* father, const char* name) : AsImpl(father, name) +{ +} +AsCluster::~AsCluster() = default; void AsCluster::getRouteAndLatency(NetCard *src, NetCard *dst, sg_platf_route_cbarg_t route, double *lat) { diff --git a/src/kernel/routing/AsCluster.hpp b/src/kernel/routing/AsCluster.hpp index 082333e7c3..452684926d 100644 --- a/src/kernel/routing/AsCluster.hpp +++ b/src/kernel/routing/AsCluster.hpp @@ -16,7 +16,7 @@ namespace routing { class XBT_PRIVATE AsCluster: public AsImpl { public: - explicit AsCluster(const char*name); + explicit AsCluster(As* father, const char* name); ~AsCluster() override; void getRouteAndLatency(NetCard *src, NetCard *dst, sg_platf_route_cbarg_t into, double *latency) override; diff --git a/src/kernel/routing/AsClusterDragonfly.cpp b/src/kernel/routing/AsClusterDragonfly.cpp index cfdb63a4ef..bd992f624d 100644 --- a/src/kernel/routing/AsClusterDragonfly.cpp +++ b/src/kernel/routing/AsClusterDragonfly.cpp @@ -16,8 +16,8 @@ namespace simgrid { namespace kernel { namespace routing { -AsClusterDragonfly::AsClusterDragonfly(const char*name) - : AsCluster(name) { +AsClusterDragonfly::AsClusterDragonfly(As* father, const char* name) : AsCluster(father, name) +{ } AsClusterDragonfly::~AsClusterDragonfly() { diff --git a/src/kernel/routing/AsClusterDragonfly.hpp b/src/kernel/routing/AsClusterDragonfly.hpp index e0ed5a618a..4f58c53c6b 100644 --- a/src/kernel/routing/AsClusterDragonfly.hpp +++ b/src/kernel/routing/AsClusterDragonfly.hpp @@ -63,7 +63,7 @@ class XBT_PRIVATE DragonflyRouter { class XBT_PRIVATE AsClusterDragonfly : public AsCluster { public: - explicit AsClusterDragonfly(const char*name); + explicit AsClusterDragonfly(As* father, const char* name); ~AsClusterDragonfly() override; // void create_links_for_node(sg_platf_cluster_cbarg_t cluster, int id, int rank, int position) override; void getRouteAndLatency(NetCard * src, NetCard * dst, sg_platf_route_cbarg_t into, double *latency) override; diff --git a/src/kernel/routing/AsClusterFatTree.cpp b/src/kernel/routing/AsClusterFatTree.cpp index c5b518f810..d9a5b3b08a 100644 --- a/src/kernel/routing/AsClusterFatTree.cpp +++ b/src/kernel/routing/AsClusterFatTree.cpp @@ -23,8 +23,7 @@ namespace simgrid { namespace kernel { namespace routing { -AsClusterFatTree::AsClusterFatTree(const char*name) - : AsCluster(name) +AsClusterFatTree::AsClusterFatTree(As* father, const char* name) : AsCluster(father, name) { XBT_DEBUG("Creating a new fat tree."); } diff --git a/src/kernel/routing/AsClusterFatTree.hpp b/src/kernel/routing/AsClusterFatTree.hpp index bff262736e..9898e5b105 100644 --- a/src/kernel/routing/AsClusterFatTree.hpp +++ b/src/kernel/routing/AsClusterFatTree.hpp @@ -102,7 +102,7 @@ public: */ class XBT_PRIVATE AsClusterFatTree : public AsCluster { public: - explicit AsClusterFatTree(const char*name); + explicit AsClusterFatTree(As* father, const char* name); ~AsClusterFatTree() override; void getRouteAndLatency(NetCard *src, NetCard *dst, sg_platf_route_cbarg_t into, diff --git a/src/kernel/routing/AsClusterTorus.cpp b/src/kernel/routing/AsClusterTorus.cpp index d38511f0a8..23c66c2f69 100644 --- a/src/kernel/routing/AsClusterTorus.cpp +++ b/src/kernel/routing/AsClusterTorus.cpp @@ -27,8 +27,8 @@ inline unsigned int *rankId_to_coords(int rankId, xbt_dynar_t dimensions) namespace simgrid { namespace kernel { namespace routing { - AsClusterTorus::AsClusterTorus(const char*name) - : AsCluster(name) { + AsClusterTorus::AsClusterTorus(As* father, const char* name) : AsCluster(father, name) + { } AsClusterTorus::~AsClusterTorus() { xbt_dynar_free(&dimensions_); diff --git a/src/kernel/routing/AsClusterTorus.hpp b/src/kernel/routing/AsClusterTorus.hpp index 1e4f264470..b5b9aa4f57 100644 --- a/src/kernel/routing/AsClusterTorus.hpp +++ b/src/kernel/routing/AsClusterTorus.hpp @@ -14,7 +14,7 @@ namespace routing { class XBT_PRIVATE AsClusterTorus : public AsCluster { public: - explicit AsClusterTorus(const char*name); + explicit AsClusterTorus(As* father, const char* name); ~AsClusterTorus() override; void create_links_for_node(sg_platf_cluster_cbarg_t cluster, int id, int rank, int position) override; void getRouteAndLatency(NetCard * src, NetCard * dst, sg_platf_route_cbarg_t into, double *latency) override; diff --git a/src/kernel/routing/AsDijkstra.cpp b/src/kernel/routing/AsDijkstra.cpp index 29f4524c38..e813722119 100644 --- a/src/kernel/routing/AsDijkstra.cpp +++ b/src/kernel/routing/AsDijkstra.cpp @@ -306,8 +306,7 @@ AsDijkstra::~AsDijkstra() /* Creation routing model functions */ -AsDijkstra::AsDijkstra(const char*name, bool cached) - : AsRoutedGraph(name) +AsDijkstra::AsDijkstra(As* father, const char* name, bool cached) : AsRoutedGraph(father, name) { if (cached) routeCache_ = xbt_dict_new_homogeneous(&route_cache_elem_free); diff --git a/src/kernel/routing/AsDijkstra.hpp b/src/kernel/routing/AsDijkstra.hpp index 5dada5a18d..ea334139e2 100644 --- a/src/kernel/routing/AsDijkstra.hpp +++ b/src/kernel/routing/AsDijkstra.hpp @@ -33,7 +33,7 @@ namespace routing { /** Dijkstra routing data: fast initialization, slow lookup, small memory requirements, shortest path routing only */ class XBT_PRIVATE AsDijkstra : public AsRoutedGraph { public: - AsDijkstra(const char*name, bool cached); + AsDijkstra(As* father, const char* name, bool cached); void seal() override; ~AsDijkstra() override; diff --git a/src/kernel/routing/AsFloyd.cpp b/src/kernel/routing/AsFloyd.cpp index f92328ca0b..4fc153b17c 100644 --- a/src/kernel/routing/AsFloyd.cpp +++ b/src/kernel/routing/AsFloyd.cpp @@ -19,8 +19,7 @@ namespace simgrid { namespace kernel { namespace routing { -AsFloyd::AsFloyd(const char*name) - : AsRoutedGraph(name) +AsFloyd::AsFloyd(As* father, const char* name) : AsRoutedGraph(father, name) { predecessorTable_ = nullptr; costTable_ = nullptr; diff --git a/src/kernel/routing/AsFloyd.hpp b/src/kernel/routing/AsFloyd.hpp index c4327ffcde..c507f81aa7 100644 --- a/src/kernel/routing/AsFloyd.hpp +++ b/src/kernel/routing/AsFloyd.hpp @@ -15,7 +15,7 @@ namespace routing { /** Floyd routing data: slow initialization, fast lookup, lesser memory requirements, shortest path routing only */ class XBT_PRIVATE AsFloyd: public AsRoutedGraph { public: - explicit AsFloyd(const char *name); + explicit AsFloyd(As* father, const char* name); ~AsFloyd() override; void getRouteAndLatency(NetCard *src, NetCard *dst, sg_platf_route_cbarg_t into, double *latency) override; diff --git a/src/kernel/routing/AsFull.cpp b/src/kernel/routing/AsFull.cpp index 0b5807e497..ac5bf96da2 100644 --- a/src/kernel/routing/AsFull.cpp +++ b/src/kernel/routing/AsFull.cpp @@ -13,9 +13,8 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_route_full, surf, "Routing part of surf"); namespace simgrid { namespace kernel { namespace routing { - AsFull::AsFull(const char*name) - : AsRoutedGraph(name) - { +AsFull::AsFull(As* father, const char* name) : AsRoutedGraph(father, name) +{ } void AsFull::seal() { diff --git a/src/kernel/routing/AsFull.hpp b/src/kernel/routing/AsFull.hpp index 66ca294b1a..0bd7571737 100644 --- a/src/kernel/routing/AsFull.hpp +++ b/src/kernel/routing/AsFull.hpp @@ -15,8 +15,7 @@ namespace routing { /** Full routing: fast, large memory requirements, fully expressive */ class XBT_PRIVATE AsFull: public AsRoutedGraph { public: - - explicit AsFull(const char*name); + explicit AsFull(As* father, const char* name); void seal() override; ~AsFull() override; diff --git a/src/kernel/routing/AsImpl.cpp b/src/kernel/routing/AsImpl.cpp index c6ab319798..e4eb1032dc 100644 --- a/src/kernel/routing/AsImpl.cpp +++ b/src/kernel/routing/AsImpl.cpp @@ -14,11 +14,14 @@ namespace simgrid { namespace kernel { namespace routing { - AsImpl::AsImpl(const char *name) : As(name) { } - AsImpl::~AsImpl() = default; - - xbt_dynar_t AsImpl::getOneLinkRoutes() { - return nullptr; + AsImpl::AsImpl(As* father, const char* name) : As(father, name) + { + } + AsImpl::~AsImpl() = default; + + xbt_dynar_t AsImpl::getOneLinkRoutes() + { + return nullptr; } /** @brief Get the common ancestor and its first childs in each line leading to src and dst */ diff --git a/src/kernel/routing/AsImpl.hpp b/src/kernel/routing/AsImpl.hpp index 374b711ae9..e202ca45c3 100644 --- a/src/kernel/routing/AsImpl.hpp +++ b/src/kernel/routing/AsImpl.hpp @@ -26,7 +26,7 @@ namespace routing { XBT_PUBLIC_CLASS AsImpl : public s4u::As { friend simgrid::kernel::routing::RoutingPlatf; protected: - explicit AsImpl(const char *name); + explicit AsImpl(As * father, const char* name); ~AsImpl() override; public: diff --git a/src/kernel/routing/AsNone.cpp b/src/kernel/routing/AsNone.cpp index f63439315c..66c5097e11 100644 --- a/src/kernel/routing/AsNone.cpp +++ b/src/kernel/routing/AsNone.cpp @@ -15,8 +15,7 @@ namespace simgrid { namespace kernel { namespace routing { -AsNone::AsNone(const char*name) - : AsImpl(name) +AsNone::AsNone(As* father, const char* name) : AsImpl(father, name) {} AsNone::~AsNone() diff --git a/src/kernel/routing/AsNone.hpp b/src/kernel/routing/AsNone.hpp index 391050c155..de11e29be4 100644 --- a/src/kernel/routing/AsNone.hpp +++ b/src/kernel/routing/AsNone.hpp @@ -15,7 +15,7 @@ namespace routing { /** No specific routing. Mainly useful with the constant network model */ class XBT_PRIVATE AsNone : public AsImpl { public: - explicit AsNone(const char*name); + explicit AsNone(As* father, const char* name); ~AsNone() override; void getRouteAndLatency(NetCard *src, NetCard *dst, sg_platf_route_cbarg_t into, double *latency) override; diff --git a/src/kernel/routing/AsRoutedGraph.cpp b/src/kernel/routing/AsRoutedGraph.cpp index db43c0c237..c25a516c1d 100644 --- a/src/kernel/routing/AsRoutedGraph.cpp +++ b/src/kernel/routing/AsRoutedGraph.cpp @@ -25,9 +25,8 @@ void routing_route_free(sg_platf_route_cbarg_t route) namespace simgrid { namespace kernel { namespace routing { - -AsRoutedGraph::AsRoutedGraph(const char*name) - : AsImpl(name) + +AsRoutedGraph::AsRoutedGraph(As* father, const char* name) : AsImpl(father, name) { } diff --git a/src/kernel/routing/AsRoutedGraph.hpp b/src/kernel/routing/AsRoutedGraph.hpp index 1b5bfa40da..9990166566 100644 --- a/src/kernel/routing/AsRoutedGraph.hpp +++ b/src/kernel/routing/AsRoutedGraph.hpp @@ -14,7 +14,7 @@ namespace routing { class XBT_PRIVATE AsRoutedGraph : public AsImpl { public: - explicit AsRoutedGraph(const char*name); + explicit AsRoutedGraph(As* father, const char* name); ~AsRoutedGraph() override; xbt_dynar_t getOneLinkRoutes() override; diff --git a/src/kernel/routing/AsVivaldi.cpp b/src/kernel/routing/AsVivaldi.cpp index 007a4539f6..a17352e2ff 100644 --- a/src/kernel/routing/AsVivaldi.cpp +++ b/src/kernel/routing/AsVivaldi.cpp @@ -48,8 +48,7 @@ namespace routing { return res; } - AsVivaldi::AsVivaldi(const char *name) - : AsCluster(name) + AsVivaldi::AsVivaldi(As* father, const char* name) : AsCluster(father, name) {} AsVivaldi::~AsVivaldi() {} diff --git a/src/kernel/routing/AsVivaldi.hpp b/src/kernel/routing/AsVivaldi.hpp index 5667ddbbaa..a1016f338f 100644 --- a/src/kernel/routing/AsVivaldi.hpp +++ b/src/kernel/routing/AsVivaldi.hpp @@ -15,7 +15,7 @@ namespace routing { /* This derivates from cluster because each host has a private link */ class XBT_PRIVATE AsVivaldi: public AsCluster { public: - explicit AsVivaldi(const char *name); + explicit AsVivaldi(As* father, const char* name); ~AsVivaldi() override; xbt_dynar_t getOneLinkRoutes() override {return nullptr;}; diff --git a/src/s4u/s4u_as.cpp b/src/s4u/s4u_as.cpp index 685cefc6ea..a86951c5b1 100644 --- a/src/s4u/s4u_as.cpp +++ b/src/s4u/s4u_as.cpp @@ -17,9 +17,8 @@ XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_as,"S4U autonomous systems"); namespace simgrid { namespace s4u { - As::As(const char *name) - : name_(xbt_strdup(name)) - { + As::As(As* father, const char* name) : father_(father), name_(xbt_strdup(name)) + { } void As::seal() { diff --git a/src/surf/sg_platf.cpp b/src/surf/sg_platf.cpp index a1ff3b100c..65e6254053 100644 --- a/src/surf/sg_platf.cpp +++ b/src/surf/sg_platf.cpp @@ -821,16 +821,36 @@ simgrid::s4u::As * sg_platf_new_AS_begin(sg_platf_AS_cbarg_t AS) /* search the routing model */ simgrid::kernel::routing::AsImpl *new_as = nullptr; switch(AS->routing){ - case A_surfxml_AS_routing_Cluster: new_as = new simgrid::kernel::routing::AsCluster(AS->id); break; - case A_surfxml_AS_routing_ClusterDragonfly: new_as = new simgrid::kernel::routing::AsClusterDragonfly(AS->id); break; - case A_surfxml_AS_routing_ClusterTorus: new_as = new simgrid::kernel::routing::AsClusterTorus(AS->id); break; - case A_surfxml_AS_routing_ClusterFatTree: new_as = new simgrid::kernel::routing::AsClusterFatTree(AS->id); break; - case A_surfxml_AS_routing_Dijkstra: new_as = new simgrid::kernel::routing::AsDijkstra(AS->id, 0); break; - case A_surfxml_AS_routing_DijkstraCache: new_as = new simgrid::kernel::routing::AsDijkstra(AS->id, 1); break; - case A_surfxml_AS_routing_Floyd: new_as = new simgrid::kernel::routing::AsFloyd(AS->id); break; - case A_surfxml_AS_routing_Full: new_as = new simgrid::kernel::routing::AsFull(AS->id); break; - case A_surfxml_AS_routing_None: new_as = new simgrid::kernel::routing::AsNone(AS->id); break; - case A_surfxml_AS_routing_Vivaldi: new_as = new simgrid::kernel::routing::AsVivaldi(AS->id); break; + case A_surfxml_AS_routing_Cluster: + new_as = new simgrid::kernel::routing::AsCluster(current_routing, AS->id); + break; + case A_surfxml_AS_routing_ClusterDragonfly: + new_as = new simgrid::kernel::routing::AsClusterDragonfly(current_routing, AS->id); + break; + case A_surfxml_AS_routing_ClusterTorus: + new_as = new simgrid::kernel::routing::AsClusterTorus(current_routing, AS->id); + break; + case A_surfxml_AS_routing_ClusterFatTree: + new_as = new simgrid::kernel::routing::AsClusterFatTree(current_routing, AS->id); + break; + case A_surfxml_AS_routing_Dijkstra: + new_as = new simgrid::kernel::routing::AsDijkstra(current_routing, AS->id, 0); + break; + case A_surfxml_AS_routing_DijkstraCache: + new_as = new simgrid::kernel::routing::AsDijkstra(current_routing, AS->id, 1); + break; + case A_surfxml_AS_routing_Floyd: + new_as = new simgrid::kernel::routing::AsFloyd(current_routing, AS->id); + break; + case A_surfxml_AS_routing_Full: + new_as = new simgrid::kernel::routing::AsFull(current_routing, AS->id); + break; + case A_surfxml_AS_routing_None: + new_as = new simgrid::kernel::routing::AsNone(current_routing, AS->id); + break; + case A_surfxml_AS_routing_Vivaldi: + new_as = new simgrid::kernel::routing::AsVivaldi(current_routing, AS->id); + break; default: xbt_die("Not a valid model!"); break; } @@ -841,10 +861,7 @@ simgrid::s4u::As * sg_platf_new_AS_begin(sg_platf_AS_cbarg_t AS) routing_platf->root_ = new_as; } else if (current_routing != nullptr && routing_platf->root_ != nullptr) { - xbt_assert(!xbt_dict_get_or_null(current_routing->children(), AS->id), - "The AS \"%s\" already exists", AS->id); - /* it is a part of the tree */ - new_as->father_ = current_routing; + xbt_assert(!xbt_dict_get_or_null(current_routing->children(), AS->id), "The AS '%s' already exists", AS->id); /* set the father behavior */ if (current_routing->hierarchy_ == simgrid::kernel::routing::AsImpl::RoutingMode::unset) current_routing->hierarchy_ = simgrid::kernel::routing::AsImpl::RoutingMode::recursive; -- 2.20.1