7 * A hideset is a null-terminated array of Nlist pointers.
8 * They are referred to by indices in the hidesets array.
13 typedef Nlist **Hideset;
17 int inserths(Hideset, Hideset, Nlist *);
20 * Test for membership in a hideset
23 checkhideset(int hs, Nlist *np)
29 for (hsp = hidesets[hs]; *hsp; hsp++) {
37 * Return the (possibly new) hideset obtained by adding np to hs.
40 newhideset(int hs, Nlist *np)
46 len = inserths(nhs, hidesets[hs], np);
47 for (i=0; i<nhidesets; i++) {
48 for (hs1=nhs, hs2=hidesets[i]; *hs1==*hs2; hs1++, hs2++)
54 if (nhidesets >= maxhidesets) {
55 maxhidesets = 3*maxhidesets/2+1;
56 hidesets = (Hideset *)dorealloc(hidesets, (sizeof (Hideset *))*maxhidesets);
58 hs1 = (Hideset)domalloc(len*sizeof(Hideset));
59 memmove(hs1, nhs, len*sizeof(Hideset));
60 hidesets[nhidesets] = hs1;
65 inserths(Hideset dhs, Hideset shs, Nlist *np)
69 while (*shs && *shs < np)
83 unionhideset(int hs1, int hs2)
87 for (hp = hidesets[hs2]; *hp; hp++)
88 hs1 = newhideset(hs1, *hp);
95 hidesets = (Hideset *)domalloc(maxhidesets*sizeof(Hideset *));
96 hidesets[0] = (Hideset)domalloc(sizeof(Hideset));
106 for (np = hidesets[hs]; *np; np++) {
107 fprintf(stderr, (char*)(*np)->name, (*np)->len);
108 fprintf(stderr, " ", 1);