-typedef struct _hashvector {
- vector table;
- unsigned long fill; // number of added elements
- unsigned long holes; // number of deleted
- unsigned long (*keyhashcode)(void *key); // The hashcode of a key
- void *(*itemkey)(void *item); // the key of ain item
- int (*haskey)(void *item,void *key); // whether an item has a given
+typedef struct {
+ /**
+ * This is the backing vector for the hashvector. Items are placed
+ * in the vector by means of their key hashcodes, at the first
+ * unused slot cyclically after the hashcode index.
+ */
+ vector table; // the table space for items
+ /**
+ * This is the fill count, i.e., how many key-distinct items there
+ * are in the backing vector.
+ */
+ unsigned long fill; // current number of contained items
+ /**
+ * This is a count of HV_HOLE markers in the backing vector, which
+ * hold the position of deleted items so as to not break the
+ * lookup sequence for items placed cyclically after their
+ * hashcode index due to hash collisions.
+ */
+ unsigned long holes; // current number of slots marking deleted items
+ /**
+ * This is a pointer to the itemkeyfun record that provides the
+ * key-and-payload abstraction for items.
+ */
+ itemkeyfun *type; // the key type for the items