diff --git a/lib/utl.c b/lib/utl.c index 33caa13..f1d5217 100644 --- a/lib/utl.c +++ b/lib/utl.c @@ -41,7 +41,13 @@ hcl_oow_t hcl_hash_bytes (const hcl_oob_t* ptr, hcl_oow_t len) const hcl_uint8_t* bp, * be; bp = ptr; be = bp + len; - while (bp < be) h = h * 31 + *bp++; + + /* this hash doesn't produce good distribution */ + /*while (bp < be) h = h * 31 + *bp++; */ + + /* SDBM hash is known to produce good overall distribution + * for many different data sets */ + while (bp < be) h = (h << 6) + (h << 16) - h + *bp++; /* constrain the hash value to be representable in a small integer * for convenience sake */