cs: improve hash-code mixing
This commit is contained in:
parent
9faa315a7e
commit
d8125082a2
|
@ -81,7 +81,7 @@
|
||||||
(let* ([+/fx
|
(let* ([+/fx
|
||||||
(lambda (hc k)
|
(lambda (hc k)
|
||||||
(#3%fx+ hc k))]
|
(#3%fx+ hc k))]
|
||||||
[sll/fs
|
[sll/fx
|
||||||
(lambda (hc i)
|
(lambda (hc i)
|
||||||
(#3%fxsll hc i))]
|
(#3%fxsll hc i))]
|
||||||
[->fx
|
[->fx
|
||||||
|
@ -91,10 +91,11 @@
|
||||||
(modulo v (greatest-fixnum))))]
|
(modulo v (greatest-fixnum))))]
|
||||||
[mix1
|
[mix1
|
||||||
(lambda (hc)
|
(lambda (hc)
|
||||||
(+/fx hc (sll/fs hc 3)))]
|
(let ([hc2 (+/fx hc (sll/fx hc 10))])
|
||||||
|
(fxlogxor hc2 (fxsrl hc2 6))))]
|
||||||
[mix2
|
[mix2
|
||||||
(lambda (hc)
|
(lambda (hc)
|
||||||
(+/fx hc (sll/fs hc 5)))])
|
(mix1 hc))])
|
||||||
(cond
|
(cond
|
||||||
[(fx> burn MAX-HASH-BURN) (values hc burn)]
|
[(fx> burn MAX-HASH-BURN) (values hc burn)]
|
||||||
[(boolean? x) (values (+/fx hc (if x #x0ace0120 #x0cafe121)) burn)]
|
[(boolean? x) (values (+/fx hc (if x #x0ace0120 #x0cafe121)) burn)]
|
||||||
|
|
Loading…
Reference in New Issue
Block a user