[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:03:32 PST 2015
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.
> ---
> 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.
More information about the mesa-dev
mailing list