(root)/
bison-3.8.2/
src/
relation.h
       1  /* Binary relations.
       2  
       3     Copyright (C) 2002, 2004, 2009-2015, 2018-2021 Free Software
       4     Foundation, Inc.
       5  
       6     This file is part of Bison, the GNU Compiler Compiler.
       7  
       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.
      12  
      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.
      17  
      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/>.  */
      20  
      21  
      22  #ifndef RELATION_H_
      23  # define RELATION_H_
      24  
      25  /* Performing operations on graphs coded as list of adjacency.
      26  
      27     If GRAPH is a relation, then GRAPH[Node] is a list of adjacent
      28     nodes, ended with END_NODE.  */
      29  
      30  # define END_NODE ((relation_node) -1)
      31  
      32  typedef size_t relation_node;
      33  typedef relation_node *relation_nodes;
      34  typedef relation_nodes *relation;
      35  
      36  typedef void (relation_node_print) (relation_node node, FILE* out);
      37  
      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);
      42  
      43  /* Compute the transitive closure of the FUNCTION on the relation R
      44     with SIZE vertices.
      45  
      46     If R (NODE1, NODE2) then on exit FUNCTION[NODE1] was extended
      47     (unioned) with FUNCTION[NODE2].
      48  
      49     FUNCTION is in-out, R is read only.  */
      50  void relation_digraph (const relation r, relation_node size, bitsetv function);
      51  
      52  /* Destructively transpose *R_ARG, of size SIZE.  */
      53  void relation_transpose (relation *R_arg, relation_node size);
      54  
      55  #endif /* ! RELATION_H_ */