Johannes Schindelin <johannes.schinde...@gmx.de> writes:

> diff --git a/hashmap.c b/hashmap.c
> index b10b642229c..061b7d61da6 100644
> --- a/hashmap.c
> +++ b/hashmap.c
> @@ -50,6 +50,20 @@ unsigned int memihash(const void *buf, size_t len)
>       return hash;
>  }
>  
> +/* Incoporate another chunk of data into a memihash computation. */
> +unsigned int memihash_continue(unsigned int hash,
> +                            const void *buf, size_t len)
> +{
> +     const unsigned char *p = buf;
> +     while (len--) {
> +             unsigned int c = *p++;
> +             if (c >= 'a' && c <= 'z')
> +                     c -= 'a' - 'A';
> +             hash = (hash * FNV32_PRIME) ^ c;
> +     }
> +     return hash;
> +}

This makes me wonder if we want to reduce the duplication (primarily
to avoid risking the loop body to go out of sync) by doing:

        unsigned int memihash(const void *buf, size_t len)
        {
                return memihash_continue(buf, len, FNV32_BASE);
        }                

If an extra call level really matters, its "inline" equivalent in
the header would probably be good.

Reply via email to