X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/da23351cb44bc018edc2c181b90bcdb7083b061c..40ee10e13b61bfb28374d96ade010a262b5abd44:/include/simgrid/kernel/routing/DijkstraZone.hpp diff --git a/include/simgrid/kernel/routing/DijkstraZone.hpp b/include/simgrid/kernel/routing/DijkstraZone.hpp index c4354636b0..dbaef58130 100644 --- a/include/simgrid/kernel/routing/DijkstraZone.hpp +++ b/include/simgrid/kernel/routing/DijkstraZone.hpp @@ -1,29 +1,17 @@ -/* 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 * - ***********/ +namespace simgrid::kernel::routing { /** @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,18 +20,22 @@ namespace routing { * long path resolution times. */ class XBT_PRIVATE DijkstraZone : public RoutedZone { -public: - DijkstraZone(NetZoneImpl* father, std::string name, bool cached); - void seal() override; + static void route_graph_delete(xbt_graph_t); - ~DijkstraZone() override; + 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_; -private: - xbt_node_t route_graph_new_node(int id, int graph_id); - xbt_node_t node_map_search(int id); - void new_route(int src_id, int dst_id, RouteCreationArgs* e_route); + 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(const std::string& name, bool cached) : RoutedZone(name), cached_(cached) {} + /* 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 @@ -55,17 +47,10 @@ public: * After this function returns, any node in the graph * will have a loopback attached to it. */ - void get_local_route(NetPoint* src, NetPoint* dst, RouteCreationArgs* route, double* lat) override; + 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, - 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 */ + const std::vector& link_list, bool symmetrical) override; }; -} // namespace routing -} // namespace kernel -} // namespace simgrid +} // namespace simgrid::kernel::routing -#endif /* SURF_ROUTING_DIJKSTRA_HPP_ */ +#endif /* SIMGRID_ROUTING_DIJKSTRA_HPP_ */