]> git.saurik.com Git - bison.git/blobdiff - src/relation.c
* src/system.h (CALLOC, MALLOC, REALLOC): Remove. All callers
[bison.git] / src / relation.c
index 7944b16efa75d188f862a3e6bbdcaa5b55445175..ecfc126d1388c1667149b47ce0c2e58169a70832 100644 (file)
@@ -1,5 +1,5 @@
 /* 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.
 
    Boston, MA 02111-1307, USA.  */
 
 #include "system.h"
-#include "bitsetv.h"
-#include "relation.h"
+
+#include <bitsetv.h>
+
 #include "getargs.h"
+#include "relation.h"
 
 void
-relation_print (relation_t relation, size_t size, FILE *out)
+relation_print (relation r, size_t size, FILE *out)
 {
-  unsigned i, j;
+  unsigned int i;
+  unsigned int j;
 
   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]);
+      if (r[i])
+       for (j = 0; r[i][j] != END_NODE; ++j)
+         fprintf (out, "%3d ", r[i][j]);
       fputc ('\n', out);
     }
   fputc ('\n', out);
@@ -47,9 +50,9 @@ relation_print (relation_t relation, size_t size, FILE *out)
 | two.                                                           |
 `---------------------------------------------------------------*/
 
-static relation_t R;
-static relation_nodes_t INDEX;
-static relation_nodes_t VERTICES;
+static relation R;
+static relation_nodes INDEX;
+static relation_nodes VERTICES;
 static int top;
 static int infinity;
 static bitsetv F;
@@ -64,7 +67,7 @@ traverse (int 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]);
@@ -90,28 +93,24 @@ traverse (int i)
 
 
 void
-relation_digraph (relation_t relation, size_t size,
-                 bitsetv *function)
+relation_digraph (relation r, size_t size, bitsetv *function)
 {
-  unsigned i;
+  unsigned int i;
 
   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;
 
-  R = relation;
+  R = r;
   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);
 
-  XFREE (INDEX);
-  XFREE (VERTICES);
+  free (INDEX);
+  free (VERTICES);
 
   *function = F;
 }
@@ -122,14 +121,14 @@ relation_digraph (relation_t relation, size_t size,
 `-------------------------------------------*/
 
 void
-relation_transpose (relation_t *R_arg, int n)
+relation_transpose (relation *R_arg, int n)
 {
   /* 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]. */
-  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]. */
-  int *nedges = XCALLOC (int, n);
+  int *nedges = xcalloc (n, sizeof *nedges);
   int i, j;
 
   if (trace_flag & trace_sets)
@@ -141,23 +140,26 @@ relation_transpose (relation_t *R_arg, int n)
   /* 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++)
-    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])
-      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]];
@@ -168,7 +170,7 @@ relation_transpose (relation_t *R_arg, int n)
 
   /* 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)