3 Copyright (C) 2002, 2004, 2009-2015, 2018-2020 Free Software
6 This file is part of Bison, the GNU Compiler Compiler.
8 This program is free software: you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation, either version 3 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>. */
25 /* Performing operations on graphs coded as list of adjacency.
27 If GRAPH is a relation, then GRAPH[Node] is a list of adjacent
28 nodes, ended with END_NODE. */
30 # define END_NODE ((relation_node) -1)
32 typedef size_t relation_node
;
33 typedef relation_node
*relation_nodes
;
34 typedef relation_nodes
*relation
;
36 typedef void (relation_node_print
) (relation_node node
, FILE* out
);
38 /* Report a relation R that has SIZE vertices. */
39 void relation_print (const char *title
,
40 relation r
, size_t size
,
41 relation_node_print print
, FILE *out
);
43 /* Compute the transitive closure of the FUNCTION on the relation R
46 If R (NODE1, NODE2) then on exit FUNCTION[NODE1] was extended
47 (unioned) with FUNCTION[NODE2].
49 FUNCTION is in-out, R is read only. */
50 void relation_digraph (const relation r
, relation_node size
, bitsetv function
);
52 /* Destructively transpose *R_ARG, of size SIZE. */
53 void relation_transpose (relation
*R_arg
, relation_node size
);
55 #endif /* ! RELATION_H_ */