maint: remove unnecessary casts before using gnulib functions
[bison.git] / src / relation.h
blob4e78a8600852e608ef4422570b1c201b703848d9
1 /* Binary relations.
3 Copyright (C) 2002, 2004, 2009-2015, 2018-2022 Free Software
4 Foundation, Inc.
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 <https://www.gnu.org/licenses/>. */
22 #ifndef RELATION_H_
23 # define RELATION_H_
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
44 with SIZE vertices.
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_ */