/* Resize only when table after removal of unused elements is either
too full or too empty. */
if ((htab->n_elements - htab->n_deleted) * 2 > htab->size
- || (htab->n_elements - htab->n_deleted) * 8 < htab->size
- && htab->size > 32)
+ || ((htab->n_elements - htab->n_deleted) * 8 < htab->size
+ && htab->size > 32))
nsize = higher_prime_number ((htab->n_elements - htab->n_deleted) * 2);
else
nsize = htab->size;
argument. */
void
-htab_traverse (htab, callback, info)
+htab_traverse_noresize (htab, callback, info)
htab_t htab;
htab_trav callback;
PTR info;
PTR *slot;
PTR *limit;
- if ((htab->n_elements - htab->n_deleted) * 8 < htab->size)
- htab_expand (htab);
-
slot = htab->entries;
limit = slot + htab->size;
while (++slot < limit);
}
+/* Like htab_traverse_noresize, but does resize the table when it is
+ too empty to improve effectivity of subsequent calls. */
+
+void
+htab_traverse (htab, callback, info)
+ htab_t htab;
+ htab_trav callback;
+ PTR info;
+{
+ PTR *slot;
+ PTR *limit;
+
+ if ((htab->n_elements - htab->n_deleted) * 8 < htab->size)
+ htab_expand (htab);
+
+ htab_traverse_noresize (htab, callback, info);
+}
+
/* Return the current size of given hash table. */
size_t