X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flib%2Fkernel%2Fhash.h;h=db9f6746431a4aa24f60baf762b2c37fb965275e;hb=9a54f33be82bd5b6136117bb3a8a37e2431e7544;hp=7f25c1025769327a88eeee4e202dffa20f28cedd;hpb=e482d5037939113b0e4e51acbf1ec8e0c4989a62;p=pintos-anon diff --git a/src/lib/kernel/hash.h b/src/lib/kernel/hash.h index 7f25c10..db9f674 100644 --- a/src/lib/kernel/hash.h +++ b/src/lib/kernel/hash.h @@ -3,6 +3,9 @@ /* Hash table. + This data structure is thoroughly documented in the Tour of + Pintos for Project 3. + This is a standard hash table with chaining. To locate an element in the table, we compute a hash function over the element's data and use that as an index into an array of @@ -15,10 +18,7 @@ conversion from a struct hash_elem back to a structure object that contains it. This is the same technique used in the linked list implementation. Refer to lib/kernel/list.h for a - detailed explanation. - - The FAQ for the VM project contains a detailed example of how - to use the hash table. */ + detailed explanation. */ #include #include @@ -36,8 +36,9 @@ struct hash_elem name of the outer structure STRUCT and the member name MEMBER of the hash element. See the big comment at the top of the file for an example. */ -#define hash_entry(HASH_ELEM, STRUCT, MEMBER) \ - ((STRUCT *) ((uint8_t *) (HASH_ELEM) - offsetof (STRUCT, MEMBER))) +#define hash_entry(HASH_ELEM, STRUCT, MEMBER) \ + ((STRUCT *) ((uint8_t *) &(HASH_ELEM)->list_elem \ + - offsetof (STRUCT, MEMBER.list_elem))) /* Computes and returns the hash value for hash element E, given auxiliary data AUX. */