This file is indexed.

/usr/include/xbt/graph.h is in libsimgrid-dev 3.11.1-9.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
/* Copyright (c) 2006-2007, 2009-2014. 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 _XBT_GRAPH_H
#define _XBT_GRAPH_H
#include "xbt/misc.h"           /* SG_BEGIN_DECL */
#include "xbt/dynar.h"
SG_BEGIN_DECL()

  /** @addtogroup XBT_graph
   *  @brief A graph data type with several interesting algorithms
   *
   * @{
   */

typedef struct xbt_node *xbt_node_t;
typedef struct xbt_edge *xbt_edge_t;
typedef struct xbt_graph *xbt_graph_t;

/* Node structure */
/* Be carfull of what you do with this structure */
/* typedef struct xbt_node *xbt_node_t; */
typedef struct xbt_node {
  xbt_dynar_t out;
  xbt_dynar_t in;               /* not used when the graph is directed */
  double position_x;            /* positive value: negative means undefined */
  double position_y;            /* positive value: negative means undefined */
  void *data;                   /* user data */
  void *xbtdata;                /* private xbt data: should be reinitialized at the
                                   beginning of your algorithm if you need to use it */
} s_xbt_node_t;

/* edge structure */
/* Be carfull of what you do with this structure */
/* typedef struct xbt_edge *xbt_edge_t; */
typedef struct xbt_edge {
  xbt_node_t src;
  xbt_node_t dst;
  void *data;                   /* user data */
  void *xbtdata;                /* private xbt data: should be reinitialized at the
                                   beginning of your algorithm if you need to use it */
  double length;                /* positive value: negative means undefined */
} s_xbt_edge_t;

/* Graph structure */
/* Be carfull of what you do with this structure */  
/* typedef struct xbt_graph *xbt_graph_t; */
typedef struct xbt_graph {
  xbt_dynar_t nodes;
  xbt_dynar_t edges;
  unsigned short int directed;
  void *data;                   /* user data */
  void *xbtdata;                /* private xbt data: should be reinitialized at the
                                   beginning of your algorithm if you need to use it */
} s_xbt_graph_t;

/* API */
XBT_PUBLIC(xbt_graph_t) xbt_graph_new_graph(unsigned short int directed,
                                            void *data);
XBT_PUBLIC(xbt_node_t) xbt_graph_new_node(xbt_graph_t g, void *data);
XBT_PUBLIC(xbt_edge_t) xbt_graph_new_edge(xbt_graph_t g, xbt_node_t src,
                                          xbt_node_t dst, void *data);
XBT_PUBLIC(void *) xbt_graph_node_get_data(xbt_node_t node);
XBT_PUBLIC(void) xbt_graph_node_set_data(xbt_node_t node, void *data);
XBT_PUBLIC(void *) xbt_graph_edge_get_data(xbt_edge_t edge);
XBT_PUBLIC(void) xbt_graph_edge_set_data(xbt_edge_t edge, void *data);

XBT_PUBLIC(xbt_edge_t) xbt_graph_get_edge(xbt_graph_t g, xbt_node_t src,
                                          xbt_node_t dst);

XBT_PUBLIC(void) xbt_graph_edge_set_length(xbt_edge_t e, double length);
XBT_PUBLIC(double) xbt_graph_edge_get_length(xbt_edge_t e);
XBT_PUBLIC(double *) xbt_graph_get_length_matrix(xbt_graph_t g);

XBT_PUBLIC(void) xbt_graph_free_node(xbt_graph_t g, xbt_node_t n,
                                     void_f_pvoid_t node_free_function,
                                     void_f_pvoid_t edge_free_function);
XBT_PUBLIC(void) xbt_graph_free_edge(xbt_graph_t g, xbt_edge_t e,
                                     void_f_pvoid_t free_function);
XBT_PUBLIC(void) xbt_graph_free_graph(xbt_graph_t g,
                                      void_f_pvoid_t node_free_function,
                                      void_f_pvoid_t edge_free_function,
                                      void_f_pvoid_t graph_free_function);

XBT_PUBLIC(int) __xbt_find_in_dynar(xbt_dynar_t dynar, void *p);

XBT_PUBLIC(xbt_dynar_t) xbt_graph_get_nodes(xbt_graph_t g);
XBT_PUBLIC(xbt_dynar_t) xbt_graph_get_edges(xbt_graph_t g);
XBT_PUBLIC(xbt_dynar_t) xbt_graph_node_get_outedges(xbt_node_t n);
XBT_PUBLIC(xbt_node_t) xbt_graph_edge_get_source(xbt_edge_t e);
XBT_PUBLIC(xbt_node_t) xbt_graph_edge_get_target(xbt_edge_t e);
XBT_PUBLIC(xbt_graph_t) xbt_graph_read(const char *filename, void
                                       *(node_label_and_data) (xbt_node_t,
                                                               const char
                                                               *,
                                                               const char
                                                               *), void
                                       *(edge_label_and_data) (xbt_edge_t,
                                                               const char
                                                               *,
                                                               const char
                                                               *)
    );

XBT_PUBLIC(void) xbt_graph_export_graphviz(xbt_graph_t g,
                                           const char *filename, const char
                                           *(node_name) (xbt_node_t), const char
                                           *(edge_name) (xbt_edge_t));
XBT_PUBLIC(void) xbt_graph_export_graphxml(xbt_graph_t g,
                                           const char *filename, const char
                                           *(node_name) (xbt_node_t), const char
                                           *(edge_name) (xbt_edge_t), const char
                                           *(node_data_print) (void *), const char
                                           *(edge_data_print) (void *));
XBT_PUBLIC(xbt_graph_t) xbt_graph_load (const char *filename);
XBT_PUBLIC(void) xbt_graph_save (xbt_graph_t span,
                                 const char *filename,
                                 const char *(nname) (xbt_node_t),
                                 const char *(ename) (xbt_edge_t));

/* Not implemented yet ! */
/* void *xbt_graph_to_array(xbt_graph_t g);  */
XBT_PUBLIC(xbt_node_t *) xbt_graph_shortest_paths(xbt_graph_t g);



/** @brief transforms the network structure of a directed acyclic graph given into a linear structure
    @return: an array containing the nodes of the graph sorted in order reverse to the path of exploration
            if a cycle is detected an exception is raised
  */

XBT_PUBLIC(xbt_node_t *) xbt_graph_topo_sort(xbt_graph_t g);

XBT_PUBLIC(xbt_edge_t *) xbt_graph_spanning_tree_prim(xbt_graph_t g);




/** Convenient for loop : g is a graph, n a node, e an edge, b a bucket and i an item **/

/* #define xbt_graph_foreachInNeighbor(v,n,i)            \ */
/*    for(i=xbt_fifo_get_first_item((v)->in);              \ */
/*      ((i)?(n=((xbt_edge_t)((xbt_fifo_get_item_content(i)) */
/* )->src):(NULL));\ */
/*        i=xbt_fifo_get_next_item(i)) */
/* #define xbt_graph_foreachOutNeighbor(v,n,i)           \ */
/*    for(i=xbt_fifo_get_first_item((v)->out);             \ */
/*      ((i)?(n=((xbt_edge_t)(xbt_fifo_get_item_content(i)))->dst):(NULL));\ */
/*        i=xbt_fifo_get_next_item(i)) */



SG_END_DECL()
#endif                          /* _XBT_GRAPH_H */
/** @} */