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
];