/[bison]/bison/src/warshall.c
ViewVC logotype

Diff of /bison/src/warshall.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.6.2.1 by akim, Wed Dec 5 09:23:10 2001 UTC revision 1.6.2.2 by akim, Mon Dec 10 08:43:37 2001 UTC
# Line 20  Line 20 
20    
21    
22  #include "system.h"  #include "system.h"
23    #include "getargs.h"
24  #include "warshall.h"  #include "warshall.h"
25    
26  /*-------------------------------------------------------------.  /*-------------------------------------------------------------.
# Line 27  Line 28 
28  | transive closure of what was given.                          |  | transive closure of what was given.                          |
29  `-------------------------------------------------------------*/  `-------------------------------------------------------------*/
30    
31    static void
32    bitmatrix_print (const char *title, unsigned *matrix, size_t size)
33    {
34      size_t i, j;
35      size_t rowsize = WORDSIZE (size) * sizeof (unsigned);
36    #define ROW(Num) ((unsigned *) ((char *) matrix + ((Num) * rowsize)))
37    
38      /* Title. */
39      fprintf (stderr, "%s BEGIN\n", title);
40    
41      /* Column numbers. */
42      fputs ("   ", stderr);
43      for (i = 0; i < size; ++i)
44        putc (i / 10 ? '0' + i / 10 : ' ', stderr);
45      putc ('\n', stderr);
46      fputs ("   ", stderr);
47      for (i = 0; i < size; ++i)
48        fprintf (stderr, "%d", i % 10);
49      putc ('\n', stderr);
50    
51      /* Bar. */
52      fputs ("  +", stderr);
53      for (i = 0; i < size; ++i)
54        putc ('-', stderr);
55      fputs ("+\n", stderr);
56    
57      /* Contents. */
58      for (i = 0; i < size; ++i)
59        {
60          fprintf (stderr, "%2d|", i);
61          for (j = 0; j < size; ++j)
62            fputs (BITISSET (ROW (i), j) ? "1" : " ", stderr);
63          fputs ("|\n", stderr);
64        }
65    
66      /* Bar. */
67      fputs ("  +", stderr);
68      for (i = 0; i < size; ++i)
69        putc ('-', stderr);
70      fputs ("+\n", stderr);
71    
72      /* End title. */
73      fprintf (stderr, "%s END\n\n", title);
74    }
75    
76  #define R(Num) (unsigned *) ((char *) R + ((Num) * rowsize))  #define R(Num) (unsigned *) ((char *) R + ((Num) * rowsize))
77    
78  static void  static void
# Line 35  TC (unsigned *R, int n) Line 81  TC (unsigned *R, int n)
81    int rowsize = WORDSIZE (n) * sizeof (unsigned);    int rowsize = WORDSIZE (n) * sizeof (unsigned);
82    int i, j, k;    int i, j, k;
83    
84      if (trace_flag)
85        bitmatrix_print ("TC: Input", R, n);
86    
87      /* R (J, I) && R (I, K) => R (J, K).
88         I *must* be the outter loop. */
89    
90    for (i = 0; i < n; ++i)    for (i = 0; i < n; ++i)
91      for (j = 0; j < n; ++j)      for (j = 0; j < n; ++j)
92        if (BITISSET (R (i), j))        if (BITISSET (R (j), i))
93          for (k = 0; k < rowsize; ++k)          for (k = 0; k < n; ++k)
94            if (BITISSET (R (i), k))            if (BITISSET (R (i), k))
95              SETBIT (R (j), k);              SETBIT (R (j), k);
96    
97      if (trace_flag)
98        bitmatrix_print ("TC: Output", R, n);
99  }  }
100    
101    

Legend:
Removed from v.1.6.2.1  
changed lines
  Added in v.1.6.2.2

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26