Chad Versace <chad.vers...@linux.intel.com> writes:

> I look forward to seeing this improved hash table land.
>
> Great that it includes tests. I failed to find a test that artificially
> constructed collisions and verified that they were handled correctly.
> Maybe I'll submit a test for that.
>
> Comments below. Everything looked correct, so my review mostly asks for
> an occasional clarifying comment.

> The while condition looks mystic. A comment here would be nice
> explaining that we break the loop because we've cycled around to the
> first probed address. Or simply a self-documenting variable name would
> suffice.

Check out the new version and see if it clarified.

>> +/**
>> + * Quick FNV-1 hash implementation based on:
>> + * http://www.isthe.com/chongo/tech/comp/fnv/
>> + *
>> + * FNV-1 is not be the best hash out there -- Jenkins's lookup3 is supposed 
>> to
>> + * be quite good, and it probably beats FNV.  But FNV has the advantage that
>> + * it involves almost no code.  For an improvement on both, see Paul
>> + * Hsieh's //www.azillionmonkeys.com/qed/hash.html
>> + */
>> +uint32_t
>> +_mesa_hash_data(const void *key, size_t size)
>
> This prototype differs from the one in hash_table.h:
>     _mesa_hash_data(const void *data, size_t size);
> Should it be 'data' or 'key'?

Meh, you're hashing the data in a key.  Arbitrarily picked one to be
consistent and renamed the local var to something else.

>> +/** FNV-1 string hash implementation */
>> +uint32_t
>> +_mesa_hash_string(const void *key)
>
> I expect the signature here to be _mesa_hash_string(const char *key). I 
> believe
> using void* will result in a future misuse of the function that would have 
> been
> caught by the type system.
>
> Why did you choose void*?

Probably I was originally typing a function that was the
_mesa_hash_data() variant.  Fixed.

>> +bool
>> +_mesa_key_string_equal(const void *a, const void *b)
>> +{
>> +   return strcmp(a, b) == 0;
>> +}
>
>
> As for _mesa_key_string_equal(), a comment here would be nice stating
> that _mesa_key_value_equal() function is intended to be passed to
> _mesa_hash_table_create().
>
> Also, I find the name of this function very confusing. "It's comparing
> the values of what? The pointers? The pointed-to's? How does it compare
> the pointed-to's of void pointers?" I think renaming this to
> _mesa_key_pointer_equal() makes it immediately clear what this function does:
> it compares pointers.

Yeah, for the current use case the things compared are actually uint32s
stuffed into a pointer, which resulted in the name I had before.  Still,
I think it's an improvement.

Attachment: pgpteQ2i1zm43.pgp
Description: PGP signature

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to