wg.conf.5: Fix a typo (in-inline comments are *not* allowed)
[dragonfly.git] / contrib / byacc / warshall.c
blob3a7dc027bddc384ac95e95e67a4b145346e7864c
1 /* $Id: warshall.c,v 1.9 2020/09/22 20:17:00 tom Exp $ */
3 #include "defs.h"
5 static void
6 transitive_closure(unsigned *R, int n)
8 int rowsize;
9 unsigned i;
10 unsigned *rowj;
11 unsigned *rp;
12 unsigned *rend;
13 unsigned *relend;
14 unsigned *cword;
15 unsigned *rowi;
17 rowsize = WORDSIZE(n);
18 relend = R + n * rowsize;
20 cword = R;
21 i = 0;
22 rowi = R;
23 while (rowi < relend)
25 unsigned *ccol = cword;
27 rowj = R;
29 while (rowj < relend)
31 if (*ccol & (1U << i))
33 rp = rowi;
34 rend = rowj + rowsize;
35 while (rowj < rend)
36 *rowj++ |= *rp++;
38 else
40 rowj += rowsize;
43 ccol += rowsize;
46 if (++i >= BITS_PER_WORD)
48 i = 0;
49 cword++;
52 rowi += rowsize;
56 void
57 reflexive_transitive_closure(unsigned *R, int n)
59 int rowsize;
60 unsigned i;
61 unsigned *rp;
62 unsigned *relend;
64 transitive_closure(R, n);
66 rowsize = WORDSIZE(n);
67 relend = R + n * rowsize;
69 i = 0;
70 rp = R;
71 while (rp < relend)
73 *rp |= (1U << i);
74 if (++i >= BITS_PER_WORD)
76 i = 0;
77 rp++;
80 rp += rowsize;