#define HASH_TABLE_DEFAULT_REHASH_SIZE 1.3
#define HASH_TABLE_MIN_SIZE 10
-#define HASH_CODE(key, ht) \
- (((((ht)->hash_function ? (ht)->hash_function (key) : LISP_HASH (key)) \
- * (ht)->golden_ratio) \
- % (ht)->size))
+#define HASH_CODE(key, ht) \
+((((ht)->hash_function ? (ht)->hash_function (key) : LISP_HASH (key)) \
+ * (ht)->golden_ratio) \
+ % (ht)->size)
#define KEYS_EQUAL_P(key1, key2, testfun) \
- (EQ ((key1), (key2)) || ((testfun) && (testfun) ((key1), (key2))))
+ (EQ (key1, key2) || ((testfun) && (testfun) (key1, key2)))
#define LINEAR_PROBING_LOOP(probe, entries, size) \
for (; \
/************************************************************************/
/* Creation of hash tables, without error-checking. */
-static double
-hash_table_rehash_threshold (Lisp_Hash_Table *ht)
-{
- return
- ht->rehash_threshold > 0.0 ? ht->rehash_threshold :
- ht->size > 4096 && !ht->test_function ? 0.7 : 0.6;
-}
-
static void
compute_hash_table_derived_values (Lisp_Hash_Table *ht)
{
ht->rehash_count = (size_t)
- ((double) ht->size * hash_table_rehash_threshold (ht));
+ ((double) ht->size * ht->rehash_threshold);
ht->golden_ratio = (size_t)
((double) ht->size * (.6180339887 / (double) sizeof (Lisp_Object)));
}
Lisp_Object hash_table;
Lisp_Hash_Table *ht = alloc_lcrecord_type (Lisp_Hash_Table, &lrecord_hash_table);
- ht->rehash_size = rehash_size;
- ht->rehash_threshold = rehash_threshold;
- ht->weakness = weakness;
-
switch (test)
{
case HASH_TABLE_EQ:
abort ();
}
- if (ht->rehash_size <= 0.0)
- ht->rehash_size = HASH_TABLE_DEFAULT_REHASH_SIZE;
+ ht->weakness = weakness;
+
+ ht->rehash_size =
+ rehash_size > 1.0 ? rehash_size : HASH_TABLE_DEFAULT_REHASH_SIZE;
+
+ ht->rehash_threshold =
+ rehash_threshold > 0.0 ? rehash_threshold :
+ size > 4096 && !ht->test_function ? 0.7 : 0.6;
+
if (size < HASH_TABLE_MIN_SIZE)
size = HASH_TABLE_MIN_SIZE;
- if (rehash_threshold < 0.0)
- rehash_threshold = 0.75;
- ht->size =
- hash_table_size ((size_t) ((double) size / hash_table_rehash_threshold (ht)) + 1);
+ ht->size = hash_table_size ((size_t) (((double) size / ht->rehash_threshold)
+ + 1.0));
ht->count = 0;
+
compute_hash_table_derived_values (ht);
/* We leave room for one never-occupied sentinel hentry at the end. */
enum hash_table_weakness weakness,
enum hash_table_test test)
{
- return make_general_lisp_hash_table
- (test, size, HASH_TABLE_DEFAULT_REHASH_SIZE, -1.0, weakness);
+ return make_general_lisp_hash_table (test, size, -1.0, -1.0, weakness);
}
/* Pretty reading of hash tables.
*/
(hash_table))
{
- return make_float (hash_table_rehash_threshold (xhash_table (hash_table)));
+ return make_float (xhash_table (hash_table)->rehash_threshold);
}
DEFUN ("hash-table-weakness", Fhash_table_weakness, 1, 1, 0, /*