table->bits = ffs(round_up(4 * (min_size + 1) / 3 - 1)) - 1;
table->n = 0;
- size = 2 << table->bits;
+ size = 1 << table->bits;
table->entries = isl_calloc_array(ctx, struct isl_hash_table_entry,
size);
if (!table->entries)
uint32_t h;
entries = table->entries;
- old_size = 2 << table->bits;
+ old_size = 1 << table->bits;
size = 2 * old_size;
table->entries = isl_calloc_array(ctx, struct isl_hash_table_entry,
size);
uint32_t h, key_bits;
key_bits = isl_hash_bits(key_hash, table->bits);
- size = 2 << table->bits;
+ size = 1 << table->bits;
for (h = key_bits; table->entries[h].data; h = (h+1) % size)
if (table->entries[h].hash == key_hash &&
eq(table->entries[h].data, val))
return &table->entries[h];
}
+int isl_hash_table_foreach(struct isl_ctx *ctx,
+ struct isl_hash_table *table,
+ int (*fn)(void *entry))
+{
+ size_t size;
+ uint32_t h;
+
+ size = 1 << table->bits;
+ for (h = 0; h < size; ++ h)
+ if (table->entries[h].data && fn(table->entries[h].data) < 0)
+ return -1;
+
+ return 0;
+}
+
void isl_hash_table_remove(struct isl_ctx *ctx,
struct isl_hash_table *table,
struct isl_hash_table_entry *entry)
if (!table || !entry)
return;
- size = 2 << table->bits;
+ size = 1 << table->bits;
h = entry - table->entries;
isl_assert(ctx, h >= 0 && h < size, return);