* src/warshall.c (TC, RTC): De-obsfucate (source reduced to 22% of

what it was!).
* src/warshall.h: Remove accidental duplication of the content.
This commit is contained in:
Akim Demaille
2001-12-05 09:23:10 +00:00
parent 0ea80316a9
commit aaf7be2c4b
3 changed files with 32 additions and 103 deletions

View File

@@ -1,3 +1,10 @@
2001-12-05 Akim Demaille <akim@epita.fr>
* src/warshall.c (TC, RTC): De-obsfucate (source reduced to 22% of
what it was!).
* src/warshall.h: Remove accidental duplication of the content.
2001-12-05 Akim Demaille <akim@epita.fr> 2001-12-05 Akim Demaille <akim@epita.fr>
* src/closure.c (set_fderives): De-obfuscate. * src/closure.c (set_fderives): De-obfuscate.

View File

@@ -1,5 +1,5 @@
/* Generate transitive closure of a matrix, /* Generate transitive closure of a matrix,
Copyright 1984, 1989, 2000 Free Software Foundation, Inc. Copyright 1984, 1989, 2000, 2001 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler. This file is part of Bison, the GNU Compiler Compiler.
@@ -22,93 +22,40 @@
#include "system.h" #include "system.h"
#include "warshall.h" #include "warshall.h"
/* Given n by n matrix of bits R, modify its contents to be the /*-------------------------------------------------------------.
transive closure of what was given. */ | Given n by n matrix of bits R, modify its contents to be the |
| transive closure of what was given. |
`-------------------------------------------------------------*/
#define R(Num) (unsigned *) ((char *) R + ((Num) * rowsize))
static void static void
TC (unsigned *R, int n) TC (unsigned *R, int n)
{ {
int rowsize; int rowsize = WORDSIZE (n) * sizeof (unsigned);
unsigned mask; int i, j, k;
unsigned *rowj;
unsigned *rp;
unsigned *rend;
unsigned *ccol;
unsigned *relend; for (i = 0; i < n; ++i)
unsigned *cword; for (j = 0; j < n; ++j)
unsigned *rowi; if (BITISSET (R (i), j))
for (k = 0; k < rowsize; ++k)
rowsize = WORDSIZE(n) * sizeof(unsigned); if (BITISSET (R (i), k))
relend = (unsigned *) ((char *) R + (n * rowsize)); SETBIT (R (j), k);
cword = R;
mask = 1;
rowi = R;
while (rowi < relend)
{
ccol = cword;
rowj = R;
while (rowj < relend)
{
if (*ccol & mask)
{
rp = rowi;
rend = (unsigned *) ((char *) rowj + rowsize);
while (rowj < rend)
*rowj++ |= *rp++;
}
else
{
rowj = (unsigned *) ((char *) rowj + rowsize);
}
ccol = (unsigned *) ((char *) ccol + rowsize);
}
mask <<= 1;
if (mask == 0)
{
mask = 1;
cword++;
}
rowi = (unsigned *) ((char *) rowi + rowsize);
}
} }
/* Reflexive Transitive Closure. Same as TC /*---------------------------------------------------------------.
and then set all the bits on the diagonal of R. */ | Reflexive Transitive Closure. Same as TC and then set all the |
| bits on the diagonal of R. |
`---------------------------------------------------------------*/
void void
RTC (unsigned *R, int n) RTC (unsigned *R, int n)
{ {
int rowsize; int rowsize = WORDSIZE (n) * sizeof (unsigned);
unsigned mask; int i;
unsigned *rp;
unsigned *relend;
TC(R, n); TC (R, n);
for (i = 0; i < n; ++i)
rowsize = WORDSIZE(n) * sizeof(unsigned); SETBIT (R (i), i);
relend = (unsigned *) ((char *) R + n*rowsize);
mask = 1;
rp = R;
while (rp < relend)
{
*rp |= mask;
mask <<= 1;
if (mask == 0)
{
mask = 1;
rp++;
}
rp = (unsigned *) ((char *) rp + rowsize);
}
} }

View File

@@ -1,30 +1,5 @@
/* Generate transitive closure of a matrix, /* Generate transitive closure of a matrix,
Copyright 1984, 1989, 2000 Free Software Foundation, Inc. Copyright 1984, 1989, 2000, 2001 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
Bison is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
Bison is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Bison; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#ifndef WARSHALL_H_
# define WARSHALL_H_
void RTC PARAMS ((unsigned *, int));
#endif /* !WARSHALL_H_ */
/* Generate transitive closure of a matrix,
Copyright 1984, 1989, 2000 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler. This file is part of Bison, the GNU Compiler Compiler.