11use core:: hash:: { BuildHasher , Hasher } ;
22use core:: sync:: atomic:: { AtomicUsize , Ordering } ;
33
4- /* FxHash multiplier ( rustc-hash); keeps mixing fast and predictable . */
4+ /* FxHash multiplier from rustc-hash. */
55const K : u64 = 0x517cc1b727220a95 ;
66
77static SEED_COUNTER : AtomicUsize = AtomicUsize :: new ( 1 ) ;
@@ -30,16 +30,15 @@ impl Hasher for FxHasher {
3030pub struct FxBuildHasher ( u64 ) ;
3131
3232impl FxBuildHasher {
33- /* Per-map seed via atomic counter, then MurmurHash3 finalizer to
34- decorrelate sequential counter values. */
33+ /* Atomic counter seed, avalanche-mixed to decorrelate sequential values. */
3534 #[ inline]
3635 pub fn new ( ) -> Self {
3736 let raw = SEED_COUNTER . fetch_add ( 1 , Ordering :: Relaxed ) as u64 ;
3837 Self ( murmur3_fmix64 ( raw) )
3938 }
4039}
4140
42- /* Avalanche mixer: a one -bit difference spreads across all 64 bits. */
41+ /* MurmurHash3 finalizer: spreads a 1 -bit difference across all 64 bits. */
4342#[ inline]
4443fn murmur3_fmix64 ( mut h : u64 ) -> u64 {
4544 h ^= h >> 33 ;
@@ -61,4 +60,4 @@ impl BuildHasher for FxBuildHasher {
6160}
6261
6362pub type FxHashMap < K , V > = hashbrown:: HashMap < K , V , FxBuildHasher > ;
64- pub type FxHashSet < T > = hashbrown:: HashSet < T , FxBuildHasher > ;
63+ pub type FxHashSet < T > = hashbrown:: HashSet < T , FxBuildHasher > ;
0 commit comments