реализация pintos find_bucket () - PullRequest
       15

реализация pintos find_bucket ()

0 голосов
/ 22 сентября 2018
 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, но на самом деле я ничего не понимаю.

  1. Почему bucket_cnt внутри хеша должно иметь степень 2?
  2. Что означает size_t bucket_idx = h->hash (e, h->aux) & (h->bucket_cnt - 1);
    Я думаю, что для хеширования достаточно только h-> hash (e, h-> aux), но есть еще кое-что, что 'h->bucket_cnt -1 '.что это значит и зачем это нужно?
...