]> git.saurik.com Git - bison.git/blame - src/relation.h
grammar: split %union to group together related aspects
[bison.git] / src / relation.h
CommitLineData
0e4d5753 1/* Binary relations.
7d424de1 2
7d6bad19 3 Copyright (C) 2002, 2004, 2009-2013 Free Software Foundation, Inc.
0e4d5753
AD
4
5 This file is part of Bison, the GNU Compiler Compiler.
6
f16b0819 7 This program is free software: you can redistribute it and/or modify
0e4d5753 8 it under the terms of the GNU General Public License as published by
f16b0819
PE
9 the Free Software Foundation, either version 3 of the License, or
10 (at your option) any later version.
0e4d5753 11
f16b0819 12 This program is distributed in the hope that it will be useful,
0e4d5753
AD
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
f16b0819 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
0e4d5753
AD
19
20
21#ifndef RELATION_H_
22# define RELATION_H_
23
24/* Performing operations on graphs coded as list of adjacency.
25
7b5cb0cd 26 If GRAPH is a relation, then GRAPH[Node] is a list of adjacent
ed4cdb7a 27 nodes, ended with END_NODE. */
0e4d5753 28
a99ec53e 29# define END_NODE ((relation_node) -1)
ed4cdb7a 30
7886c2d4 31typedef size_t relation_node;
7b5cb0cd
PE
32typedef relation_node *relation_nodes;
33typedef relation_nodes *relation;
0e4d5753
AD
34
35
7b5cb0cd 36/* Report a relation R that has SIZE vertices. */
88636fbd 37void relation_print (relation r, relation_node size, FILE *out);
0e4d5753 38
7b5cb0cd
PE
39/* Compute the transitive closure of the FUNCTION on the relation R
40 with SIZE vertices.
0e4d5753 41
7b5cb0cd
PE
42 If R (NODE-1, NODE-2) then on exit FUNCTION[NODE - 1] was extended
43 (unioned) with FUNCTION[NODE - 2]. */
88636fbd 44void relation_digraph (relation r, relation_node size, bitsetv *function);
0e4d5753
AD
45
46/* Destructively transpose *R_ARG, of size N. */
88636fbd 47void relation_transpose (relation *R_arg, relation_node n);
0e4d5753
AD
48
49#endif /* ! RELATION_H_ */