13 h = ((h << 5) + h) ^ ch;
27 set->first = (int *) alloc(sizeof(int) * (set->mask + 1));
28 if (!set->first) return 0;
29 set->p = (strset_list *) alloc(sizeof(strset_list) * set->a);
30 if (!set->p) { alloc_free(set->first); return 0; }
31 set->x = (char **) alloc(sizeof(char *) * set->a);
32 if (!set->x) { alloc_free(set->p); alloc_free(set->first); return 0; }
34 for (h = 0;h <= set->mask;++h) set->first[h] = -1;
39 char *strset_in(set,s)
49 i = set->first[h & set->mask];
56 if (!str_diff(xi,s)) return xi;
79 newa = n + 10 + (n >> 3);
80 newp = (strset_list *) alloc(sizeof(strset_list) * newa);
82 newx = (char **) alloc(sizeof(char *) * newa);
83 if (!newx) { alloc_free(newp); return 0; }
85 byte_copy(newp,sizeof(strset_list) * n,set->p);
86 byte_copy(newx,sizeof(char *) * n,set->x);
93 if (n + n + n > set->mask)
100 newmask = set->mask + set->mask + 1;
101 newfirst = (int *) alloc(sizeof(int) * (newmask + 1));
102 if (!newfirst) return 0;
104 for (h = 0;h <= newmask;++h) newfirst[h] = -1;
106 for (i = 0;i < n;++i)
110 sl->next = newfirst[h];
114 alloc_free(set->first);
115 set->first = newfirst;
125 sl->next = set->first[h];