]> git.saurik.com Git - bison.git/blobdiff - src/relation.c
Change @dircategory from "GNU programming tools" to "Software development".
[bison.git] / src / relation.c
index 7944b16efa75d188f862a3e6bbdcaa5b55445175..9e2c2bd447ad8b2f61ce9d40ca20c85c4a996c4c 100644 (file)
@@ -1,5 +1,5 @@
 /* Binary relations.
 /* Binary relations.
-   Copyright (C) 2002  Free Software Foundation, Inc.
+   Copyright (C) 2002, 2004 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
 
    This file is part of Bison, the GNU Compiler Compiler.
 
    Boston, MA 02111-1307, USA.  */
 
 #include "system.h"
    Boston, MA 02111-1307, USA.  */
 
 #include "system.h"
-#include "bitsetv.h"
-#include "relation.h"
+
+#include <bitsetv.h>
+
 #include "getargs.h"
 #include "getargs.h"
+#include "relation.h"
 
 void
 
 void
-relation_print (relation_t relation, size_t size, FILE *out)
+relation_print (relation r, relation_node size, FILE *out)
 {
 {
-  unsigned i, j;
+  relation_node i;
+  relation_node j;
 
   for (i = 0; i < size; ++i)
     {
 
   for (i = 0; i < size; ++i)
     {
-      fprintf (out, "%3d: ", i);
-      if (relation[i])
-       for (j = 0; relation[i][j] != -1; ++j)
-         fprintf (out, "%3d ", relation[i][j]);
+      fprintf (out, "%3lu: ", (unsigned long int) i);
+      if (r[i])
+       for (j = 0; r[i][j] != END_NODE; ++j)
+         fprintf (out, "%3lu ", (unsigned long int) r[i][j]);
       fputc ('\n', out);
     }
   fputc ('\n', out);
       fputc ('\n', out);
     }
   fputc ('\n', out);
@@ -47,24 +50,24 @@ relation_print (relation_t relation, size_t size, FILE *out)
 | two.                                                           |
 `---------------------------------------------------------------*/
 
 | two.                                                           |
 `---------------------------------------------------------------*/
 
-static relation_t R;
-static relation_nodes_t INDEX;
-static relation_nodes_t VERTICES;
-static int top;
-static int infinity;
+static relation R;
+static relation_nodes INDEX;
+static relation_nodes VERTICES;
+static relation_node top;
+static relation_node infinity;
 static bitsetv F;
 
 static void
 static bitsetv F;
 
 static void
-traverse (int i)
+traverse (relation_node i)
 {
 {
-  int j;
-  int height;
+  relation_node j;
+  relation_node height;
 
   VERTICES[++top] = i;
   INDEX[i] = height = top;
 
   if (R[i])
 
   VERTICES[++top] = i;
   INDEX[i] = height = top;
 
   if (R[i])
-    for (j = 0; R[i][j] >= 0; ++j)
+    for (j = 0; R[i][j] != END_NODE; ++j)
       {
        if (INDEX[R[i][j]] == 0)
          traverse (R[i][j]);
       {
        if (INDEX[R[i][j]] == 0)
          traverse (R[i][j]);
@@ -90,28 +93,24 @@ traverse (int i)
 
 
 void
 
 
 void
-relation_digraph (relation_t relation, size_t size,
-                 bitsetv *function)
+relation_digraph (relation r, relation_node size, bitsetv *function)
 {
 {
-  unsigned i;
+  relation_node i;
 
   infinity = size + 2;
 
   infinity = size + 2;
-  INDEX = XCALLOC (relation_node_t, size + 1);
-  VERTICES = XCALLOC (relation_node_t, size + 1);
+  INDEX = xcalloc (size + 1, sizeof *INDEX);
+  VERTICES = xnmalloc (size + 1, sizeof *VERTICES);
   top = 0;
 
   top = 0;
 
-  R = relation;
+  R = r;
   F = *function;
 
   F = *function;
 
-  for (i = 0; i < size; i++)
-    INDEX[i] = 0;
-
   for (i = 0; i < size; i++)
     if (INDEX[i] == 0 && R[i])
       traverse (i);
 
   for (i = 0; i < size; i++)
     if (INDEX[i] == 0 && R[i])
       traverse (i);
 
-  XFREE (INDEX);
-  XFREE (VERTICES);
+  free (INDEX);
+  free (VERTICES);
 
   *function = F;
 }
 
   *function = F;
 }
@@ -122,15 +121,16 @@ relation_digraph (relation_t relation, size_t size,
 `-------------------------------------------*/
 
 void
 `-------------------------------------------*/
 
 void
-relation_transpose (relation_t *R_arg, int n)
+relation_transpose (relation *R_arg, relation_node n)
 {
   /* The result. */
 {
   /* The result. */
-  relation_t new_R = XCALLOC (relation_nodes_t, n);
+  relation new_R = xnmalloc (n, sizeof *new_R);
   /* END_R[I] -- next entry of NEW_R[I]. */
   /* END_R[I] -- next entry of NEW_R[I]. */
-  relation_t end_R = XCALLOC (relation_nodes_t, n);
+  relation end_R = xnmalloc (n, sizeof *end_R);
   /* NEDGES[I] -- total size of NEW_R[I]. */
   /* NEDGES[I] -- total size of NEW_R[I]. */
-  int *nedges = XCALLOC (int, n);
-  int i, j;
+  size_t *nedges = xcalloc (n, sizeof *nedges);
+  relation_node i;
+  relation_node j;
 
   if (trace_flag & trace_sets)
     {
 
   if (trace_flag & trace_sets)
     {
@@ -141,23 +141,26 @@ relation_transpose (relation_t *R_arg, int n)
   /* Count. */
   for (i = 0; i < n; i++)
     if ((*R_arg)[i])
   /* Count. */
   for (i = 0; i < n; i++)
     if ((*R_arg)[i])
-      for (j = 0; (*R_arg)[i][j] >= 0; ++j)
+      for (j = 0; (*R_arg)[i][j] != END_NODE; ++j)
        ++nedges[(*R_arg)[i][j]];
 
   /* Allocate. */
   for (i = 0; i < n; i++)
        ++nedges[(*R_arg)[i][j]];
 
   /* Allocate. */
   for (i = 0; i < n; i++)
-    if (nedges[i] > 0)
-      {
-       relation_node_t *sp = XCALLOC (relation_node_t, nedges[i] + 1);
-       sp[nedges[i]] = -1;
-       new_R[i] = sp;
-       end_R[i] = sp;
-      }
+    {
+      relation_node *sp = NULL;
+      if (nedges[i] > 0)
+       {
+         sp = xnmalloc (nedges[i] + 1, sizeof *sp);
+         sp[nedges[i]] = END_NODE;
+       }
+      new_R[i] = sp;
+      end_R[i] = sp;
+    }
 
   /* Store. */
   for (i = 0; i < n; i++)
     if ((*R_arg)[i])
 
   /* Store. */
   for (i = 0; i < n; i++)
     if ((*R_arg)[i])
-      for (j = 0; (*R_arg)[i][j] >= 0; ++j)
+      for (j = 0; (*R_arg)[i][j] != END_NODE; ++j)
        {
          *end_R[(*R_arg)[i][j]] = i;
          ++end_R[(*R_arg)[i][j]];
        {
          *end_R[(*R_arg)[i][j]] = i;
          ++end_R[(*R_arg)[i][j]];
@@ -168,7 +171,7 @@ relation_transpose (relation_t *R_arg, int n)
 
   /* Free the input: it is replaced with the result. */
   for (i = 0; i < n; i++)
 
   /* Free the input: it is replaced with the result. */
   for (i = 0; i < n; i++)
-    XFREE ((*R_arg)[i]);
+    free ((*R_arg)[i]);
   free (*R_arg);
 
   if (trace_flag & trace_sets)
   free (*R_arg);
 
   if (trace_flag & trace_sets)