[Mesa-dev] [PATCH 148/133] util/hash_table: Pull the details of the FNV-a1 into helpers

Matt Turner mattst88 at gmail.com
Tue Jan 6 17:44:16 PST 2015


On Tue, Jan 6, 2015 at 5:11 PM, Jason Ekstrand <jason at jlekstrand.net> wrote:
> On Tue, Jan 6, 2015 at 5:03 PM, Matt Turner <mattst88 at gmail.com> wrote:
>> On Tue, Jan 6, 2015 at 4:34 PM, Jason Ekstrand <jason at jlekstrand.net>
>> wrote:
>> > This way the basics of the FNV-a1 hash can be reused to easily create
>> > other
>> > hashing functions.
>> >
>> > Cc: Eric Anholt <eric at anholt.net>
>>
>> This didn't actually Cc him.
>
>
> My e-mail says it did...

Strange. Maybe the mailing list drops Cc.

>>
>>
>> > ---
>> >  src/util/hash_table.c | 17 ++++-------------
>> >  src/util/hash_table.h | 19 +++++++++++++++++++
>> >  2 files changed, 23 insertions(+), 13 deletions(-)
>> >
>> > diff --git a/src/util/hash_table.c b/src/util/hash_table.c
>> > index 920bdfd..ece72bc 100644
>> > --- a/src/util/hash_table.c
>> > +++ b/src/util/hash_table.c
>> > @@ -396,27 +396,18 @@ _mesa_hash_table_random_entry(struct hash_table
>> > *ht,
>> >  uint32_t
>> >  _mesa_hash_data(const void *data, size_t size)
>> >  {
>> > -   uint32_t hash = 2166136261ul;
>> > -   const uint8_t *bytes = data;
>> > -
>> > -   while (size-- != 0) {
>> > -      hash ^= *bytes;
>> > -      hash = hash * 0x01000193;
>> > -      bytes++;
>> > -   }
>> > -
>> > -   return hash;
>> > +   return _mesa_FNV32_1a_accumulate_block(_mesa_FNV32_1a_offset_bias,
>> > +                                          data, size);
>> >  }
>> >
>> >  /** FNV-1a string hash implementation */
>> >  uint32_t
>> >  _mesa_hash_string(const char *key)
>> >  {
>> > -   uint32_t hash = 2166136261ul;
>> > +   uint32_t hash = _mesa_FNV32_1a_offset_bias;
>> >
>> >     while (*key != 0) {
>> > -      hash ^= *key;
>> > -      hash = hash * 0x01000193;
>> > +      hash = _mesa_FNV32_1a_accumulate(hash, *key);
>> >        key++;
>> >     }
>> >
>> > diff --git a/src/util/hash_table.h b/src/util/hash_table.h
>> > index d6b6ebf..3d98cea 100644
>> > --- a/src/util/hash_table.h
>> > +++ b/src/util/hash_table.h
>> > @@ -90,6 +90,25 @@ static inline uint32_t _mesa_hash_pointer(const void
>> > *pointer)
>> >     return _mesa_hash_data(&pointer, sizeof(pointer));
>> >  }
>> >
>> > +static const uint32_t _mesa_FNV32_1a_offset_bias = 2166136261u;
>>
>> I don't think you want this in the header.
>
>
> Explain?  The whole point is to make the bits of FNV-1a re-usable by other
> bits of mesa.  That requires them to have access to that constant.

Ah, I see.


More information about the mesa-dev mailing list