X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/88fad0aaff9eb463f048bfdfe4ad6218aba44ddb..07f196691f95ce17dcaecb68e984e93df3debb58:/include/simgrid/kernel/routing/DijkstraZone.hpp?ds=sidebyside diff --git a/include/simgrid/kernel/routing/DijkstraZone.hpp b/include/simgrid/kernel/routing/DijkstraZone.hpp index 2a638bd9b0..fa4c176440 100644 --- a/include/simgrid/kernel/routing/DijkstraZone.hpp +++ b/include/simgrid/kernel/routing/DijkstraZone.hpp @@ -1,29 +1,19 @@ -/* Copyright (c) 2013-2018. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2013-2023. 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. */ -#ifndef SURF_ROUTING_DIJKSTRA_HPP_ -#define SURF_ROUTING_DIJKSTRA_HPP_ +#ifndef SIMGRID_ROUTING_DIJKSTRA_HPP_ +#define SIMGRID_ROUTING_DIJKSTRA_HPP_ #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 +22,22 @@ namespace routing { * long path resolution times. */ class XBT_PRIVATE DijkstraZone : public RoutedZone { + 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(unsigned long id); + xbt_node_t node_map_search(unsigned long id); + void new_edge(unsigned long src_id, unsigned long dst_id, Route* 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) : RoutedZone(name), cached_(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,17 +49,12 @@ 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(const NetPoint* src, const NetPoint* dst, Route* route, double* lat) override; + void add_route(NetPoint* src, NetPoint* dst, NetPoint* gw_src, NetPoint* gw_dst, + const std::vector& link_list, bool symmetrical) override; }; } // namespace routing } // namespace kernel } // namespace simgrid -#endif /* SURF_ROUTING_DIJKSTRA_HPP_ */ +#endif /* SIMGRID_ROUTING_DIJKSTRA_HPP_ */