struct hash
{
size_t elem_cnt; /* Number of elements in table. */
size_t bucket_cnt; /* Number of buckets, a power of 2. */
struct list *buckets; /* Array of `bucket_cnt' lists. */
hash_hash_func *hash; /* Hash function. */
hash_less_func *less; /* Comparison function. */
void *aux; /* Auxiliary data for `hash' and `less'. */
};
static struct list *
find_bucket (struct hash *h, struct hash_elem *e)
{
size_t bucket_idx = h->hash (e, h->aux) & (h->bucket_cnt - 1);
return &h->buckets[bucket_idx];
}
Я искал структуру данных pintos, но на самом деле я ничего не понимаю.
- Почему bucket_cnt внутри хеша должно иметь степень 2?
- Что означает
size_t bucket_idx = h->hash (e, h->aux) & (h->bucket_cnt - 1);
Я думаю, что для хеширования достаточно только h-> hash (e, h-> aux), но есть еще кое-что, что 'h->bucket_cnt -1 '.что это значит и зачем это нужно?