Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
proper check for the -std=gnu++11 standard, and take in on clang too
[simgrid.git] / src / surf / surf_routing_dijkstra.hpp
1 /* Copyright (c) 2013-2014. The SimGrid Team.
2  * All rights reserved.                                                     */
3
4 /* This program is free software; you can redistribute it and/or modify it
5  * under the terms of the license (GNU LGPL) which comes with this package. */
6
7 #include "surf_routing_generic.hpp"
8
9 #ifndef SURF_ROUTING_DIJKSTRA_HPP_
10 #define SURF_ROUTING_DIJKSTRA_HPP_
11
12 typedef struct graph_node_data {
13   int id;
14   int graph_id;                 /* used for caching internal graph id's */
15 } s_graph_node_data_t, *graph_node_data_t;
16
17 typedef struct graph_node_map_element {
18   xbt_node_t node;
19 } s_graph_node_map_element_t, *graph_node_map_element_t;
20
21 typedef struct route_cache_element {
22   int *pred_arr;
23   int size;
24 } s_route_cache_element_t, *route_cache_element_t;
25
26 /***********
27  * Classes *
28  ***********/
29 class AsDijkstra;
30
31 class AsDijkstra : public AsGeneric {
32 public:
33   AsDijkstra();
34   AsDijkstra(int cached);
35   ~AsDijkstra();
36         xbt_node_t routeGraphNewNode(int id, int graph_id);
37         graph_node_map_element_t nodeMapSearch(int id);
38         void newRoute(int src_id, int dst_id, sg_platf_route_cbarg_t e_route);
39     /**
40      * For each vertex (node) already in the graph,
41      * make sure it also has a loopback link; this loopback
42      * can potentially already be in the graph, and in that
43      * case nothing will be done.
44      *
45      * If no loopback is specified for a node, we will use
46      * the loopback that is provided by the routing platform.
47      *
48      * After this function returns, any node in the graph
49      * will have a loopback attached to it.
50      */
51         void addLoopback();
52         void getRouteAndLatency(RoutingEdge *src, RoutingEdge *dst, sg_platf_route_cbarg_t route, double *lat);
53         xbt_dynar_t getOnelinkRoutes();
54         void getRouteAndLatency(sg_platf_route_cbarg_t route, double *lat);
55         void parseASroute(sg_platf_route_cbarg_t route);
56         void parseRoute(sg_platf_route_cbarg_t route);
57         void end();
58
59   xbt_graph_t p_routeGraph;      /* xbt_graph */
60   xbt_dict_t p_graphNodeMap;    /* map */
61   xbt_dict_t p_routeCache;       /* use in cache mode */
62   int m_cached;
63 };
64
65 #endif /* SURF_ROUTING_DIJKSTRA_HPP_ */