+Sun Jun 25 22:35:28 2006 Ben Pfaff <blp@gnu.org>
+
+ Optimize rehashing: we know that none of the entries in the hash
+ table are equal, so we need not compare them to each other during
+ rehashing.
+
+ * hash.c: (locate_empty_entry) New function.
+ (rehash) Use locate_empty_entry() instead of
+ locate_matching_entry().
+
Fri Jun 9 14:03:29 2006 Ben Pfaff <blp@gnu.org>
Reform string library.
}
}
+/* Returns the index of an empty entry that indicates
+ where TARGET should go, assuming that TARGET is not equal to
+ any item already in the hash table. */
+static inline unsigned
+locate_empty_entry (struct hsh_table *h, const void *target)
+{
+ unsigned i = h->hash (target, h->aux);
+
+ assert (h->hash_ordered);
+ for (;;)
+ {
+ i &= h->size - 1;
+ if (h->entries[i] == NULL)
+ return i;
+ i--;
+ }
+}
+
/* Changes the capacity of H to NEW_SIZE, which must be a
positive power of 2 at least as large as the number of
elements in H. */
{
void *entry = *table_p;
if (entry != NULL)
- h->entries[locate_matching_entry (h, entry)] = entry;
+ h->entries[locate_empty_entry (h, entry)] = entry;
}
free (begin);