Re: [PATCH 2/5] hashmap: allow memihash computation to be continued
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Feb 18, 2017, 05:35 UTC
- Message-ID
- <xmqq7f4onjrs.fsf@gitster.mtv.corp.google.com>
- In-Reply-To
- <bd4893f86c4484fc36480848bf2d0905d961e022.1487071883.git.johannes.schindelin@gmx.de>
Johannes Schindelin <johannes.schindelin@gmx.de> writes:
Show 21 quoted lines
> 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.