version 1.5, 1997/08/25 16:17:10 |
version 1.6, 1999/04/18 17:06:30 |
|
|
{ |
{ |
int i, use, nuse; |
int i, use, nuse; |
fa *pfa; |
fa *pfa; |
|
static int now = 1; |
|
|
if (setvec == 0) { /* first time through any RE */ |
if (setvec == 0) { /* first time through any RE */ |
maxsetvec = MAXLIN; |
maxsetvec = MAXLIN; |
|
|
for (i = 0; i < nfatab; i++) /* is it there already? */ |
for (i = 0; i < nfatab; i++) /* is it there already? */ |
if (fatab[i]->anchor == anchor |
if (fatab[i]->anchor == anchor |
&& strcmp(fatab[i]->restr, s) == 0) { |
&& strcmp(fatab[i]->restr, s) == 0) { |
fatab[i]->use++; |
fatab[i]->use = now++; |
return fatab[i]; |
return fatab[i]; |
} |
} |
pfa = mkdfa(s, anchor); |
pfa = mkdfa(s, anchor); |
if (nfatab < NFA) { /* room for another */ |
if (nfatab < NFA) { /* room for another */ |
fatab[nfatab] = pfa; |
fatab[nfatab] = pfa; |
fatab[nfatab]->use = 1; |
fatab[nfatab]->use = now++; |
nfatab++; |
nfatab++; |
return pfa; |
return pfa; |
} |
} |
|
|
} |
} |
freefa(fatab[nuse]); |
freefa(fatab[nuse]); |
fatab[nuse] = pfa; |
fatab[nuse] = pfa; |
pfa->use = 1; |
pfa->use = now++; |
return pfa; |
return pfa; |
} |
} |
|
|