* src/closure.c (closure): Instead of looping over word in array

then bits in words, loop over bits in array.
This commit is contained in:
Akim Demaille
2001-11-28 14:57:16 +00:00
parent a816bf3eac
commit e1828f4f07
2 changed files with 17 additions and 17 deletions

View File

@@ -1,10 +1,14 @@
2001-11-28 Akim Demaille <akim@epita.fr>
* src/closure.c (closure): Instead of looping over word in array
then bits in words, loop over bits in array.
2001-11-28 Akim Demaille <akim@epita.fr>
* src/closure.c (closure): No longer optimize the special case
where all the bits of `ruleset[r]' are set to 0, to make the code
clearer.
2001-11-28 Akim Demaille <akim@epita.fr>
* src/closure.c (closure): `r' and `c' are new variables, used to

View File

@@ -242,7 +242,8 @@ closure (short *core, int n)
/* Index over RULESET. */
int r;
int itemno;
/* A bit index over RULESET. */
int b;
if (trace_flag)
{
@@ -271,27 +272,22 @@ closure (short *core, int n)
ruleno = 0;
itemsetsize = 0;
c = 0;
for (r = 0; r < rulesetsize; ++r)
for (b = 0; b < rulesetsize * BITS_PER_WORD; ++b)
{
int b;
for (b = 0; b < BITS_PER_WORD; b++)
if (BITISSET (ruleset, b))
{
if (ruleset[r] & (1 << b))
int itemno = rule_table[ruleno].rhs;
while (c < n && core[c] < itemno)
{
itemno = rule_table[ruleno].rhs;
while (c < n && core[c] < itemno)
{
itemset[itemsetsize] = core[c];
itemsetsize++;
c++;
}
itemset[itemsetsize] = itemno;
itemset[itemsetsize] = core[c];
itemsetsize++;
c++;
}
ruleno++;
itemset[itemsetsize] = itemno;
itemsetsize++;
}
ruleno++;
}
while (c < n)