X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/88fad0aaff9eb463f048bfdfe4ad6218aba44ddb..8735a101c4a502473ba7381e88aec514ebe1b828:/include/simgrid/kernel/routing/DijkstraZone.hpp diff --git a/include/simgrid/kernel/routing/DijkstraZone.hpp b/include/simgrid/kernel/routing/DijkstraZone.hpp index 2a638bd9b0..91fb35d7a7 100644 --- a/include/simgrid/kernel/routing/DijkstraZone.hpp +++ b/include/simgrid/kernel/routing/DijkstraZone.hpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2013-2018. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2013-2021. 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. */ @@ -8,22 +8,13 @@ #include -struct s_graph_node_data_t { - int id; - int graph_id; /* used for caching internal graph id's */ -}; -typedef s_graph_node_data_t* graph_node_data_t; namespace simgrid { namespace kernel { namespace routing { -/*********** - * Classes * - ***********/ - /** @ingroup ROUTING_API - * @brief NetZone with an explicit routing computed on need with Dijsktra + * @brief NetZone with an explicit routing computed on need with Dijkstra * * The path between components is computed each time you request it, * using the Dijkstra algorithm. A cache can be used to reduce the computation. @@ -32,14 +23,23 @@ namespace routing { * long path resolution times. */ class XBT_PRIVATE DijkstraZone : public RoutedZone { +private: + static void route_graph_delete(xbt_graph_t); + + std::unique_ptr route_graph_{ + xbt_graph_new_graph(1, nullptr), &DijkstraZone::route_graph_delete}; + std::map graph_node_map_; + bool cached_; + std::map> route_cache_; + + xbt_node_t route_graph_new_node(int id); + xbt_node_t node_map_search(int id); + void new_edge(int src_id, int dst_id, RouteCreationArgs* e_route); + void do_seal() override; + public: - DijkstraZone(NetZone* father, std::string name, bool cached); - void seal() override; + DijkstraZone(const std::string& name, bool cached); - ~DijkstraZone() override; - xbt_node_t routeGraphNewNode(int id, int graph_id); - xbt_node_t nodeMapSearch(int id); - void newRoute(int src_id, int dst_id, RouteCreationArgs* e_route); /* For each vertex (node) already in the graph, * make sure it also has a loopback link; this loopback * can potentially already be in the graph, and in that @@ -51,14 +51,9 @@ public: * After this function returns, any node in the graph * will have a loopback attached to it. */ - void getLocalRoute(NetPoint* src, NetPoint* dst, RouteCreationArgs* route, double* lat) override; - void addRoute(NetPoint* src, NetPoint* dst, NetPoint* gw_src, NetPoint* gw_dst, - std::vector& link_list, bool symmetrical) override; - - xbt_graph_t route_graph_ = nullptr; /* xbt_graph */ - std::map graph_node_map_; /* map */ - bool cached_; /* cache mode */ - std::map> route_cache_; /* use in cache mode */ + void get_local_route(NetPoint* src, NetPoint* dst, RouteCreationArgs* route, double* lat) override; + void add_route(NetPoint* src, NetPoint* dst, NetPoint* gw_src, NetPoint* gw_dst, + std::vector& link_list, bool symmetrical) override; }; } // namespace routing } // namespace kernel