1+ use crate :: RandomState ;
12use core:: hash:: BuildHasher ;
23use core:: hash:: Hash ;
34use core:: hash:: Hasher ;
@@ -7,8 +8,6 @@ extern crate alloc;
78#[ cfg( feature = "std" ) ]
89extern crate std as alloc;
910
10- #[ cfg( feature = "specialize" ) ]
11- use crate :: BuildHasherExt ;
1211#[ cfg( feature = "specialize" ) ]
1312use alloc:: string:: String ;
1413#[ cfg( feature = "specialize" ) ]
@@ -18,7 +17,7 @@ use alloc::vec::Vec;
1817/// Rather than using a Hasher generically which can hash any value, this provides a way to get a specialized hash
1918/// for a specific type. So this may be faster for primitive types.
2019pub ( crate ) trait CallHasher {
21- fn get_hash < H : Hash + ?Sized , B : BuildHasher > ( value : & H , build_hasher : & B ) -> u64 ;
20+ fn get_hash < H : Hash + ?Sized > ( value : & H , random_state : & RandomState ) -> u64 ;
2221}
2322
2423#[ cfg( not( feature = "specialize" ) ) ]
2726 T : Hash + ?Sized ,
2827{
2928 #[ inline]
30- fn get_hash < H : Hash + ?Sized , B : BuildHasher > ( value : & H , build_hasher : & B ) -> u64 {
31- let mut hasher = build_hasher . build_hasher ( ) ;
29+ fn get_hash < H : Hash + ?Sized > ( value : & H , random_state : & RandomState ) -> u64 {
30+ let mut hasher = random_state . build_hasher ( ) ;
3231 value. hash ( & mut hasher) ;
3332 hasher. finish ( )
3433 }
4039 T : Hash + ?Sized ,
4140{
4241 #[ inline]
43- default fn get_hash < H : Hash + ?Sized , B : BuildHasher > ( value : & H , build_hasher : & B ) -> u64 {
44- let mut hasher = build_hasher . build_hasher ( ) ;
42+ default fn get_hash < H : Hash + ?Sized > ( value : & H , random_state : & RandomState ) -> u64 {
43+ let mut hasher = random_state . build_hasher ( ) ;
4544 value. hash ( & mut hasher) ;
4645 hasher. finish ( )
4746 }
@@ -52,8 +51,8 @@ macro_rules! call_hasher_impl_u64 {
5251 #[ cfg( feature = "specialize" ) ]
5352 impl CallHasher for $typ {
5453 #[ inline]
55- fn get_hash<H : Hash + ?Sized , B : BuildHasher >( value: & H , build_hasher : & B ) -> u64 {
56- build_hasher . hash_as_u64( value)
54+ fn get_hash<H : Hash + ?Sized >( value: & H , random_state : & RandomState ) -> u64 {
55+ random_state . hash_as_u64( value)
5756 }
5857 }
5958 } ;
@@ -80,8 +79,8 @@ macro_rules! call_hasher_impl_fixed_length{
8079 #[ cfg( feature = "specialize" ) ]
8180 impl CallHasher for $typ {
8281 #[ inline]
83- fn get_hash<H : Hash + ?Sized , B : BuildHasher >( value: & H , build_hasher : & B ) -> u64 {
84- build_hasher . hash_as_fixed_length( value)
82+ fn get_hash<H : Hash + ?Sized >( value: & H , random_state : & RandomState ) -> u64 {
83+ random_state . hash_as_fixed_length( value)
8584 }
8685 }
8786 } ;
@@ -99,32 +98,32 @@ call_hasher_impl_fixed_length!(&isize);
9998#[ cfg( feature = "specialize" ) ]
10099impl CallHasher for [ u8 ] {
101100 #[ inline]
102- fn get_hash < H : Hash + ?Sized , B : BuildHasher > ( value : & H , build_hasher : & B ) -> u64 {
103- build_hasher . hash_as_str ( value)
101+ fn get_hash < H : Hash + ?Sized > ( value : & H , random_state : & RandomState ) -> u64 {
102+ random_state . hash_as_str ( value)
104103 }
105104}
106105
107106#[ cfg( feature = "specialize" ) ]
108107impl CallHasher for Vec < u8 > {
109108 #[ inline]
110- fn get_hash < H : Hash + ?Sized , B : BuildHasher > ( value : & H , build_hasher : & B ) -> u64 {
111- build_hasher . hash_as_str ( value)
109+ fn get_hash < H : Hash + ?Sized > ( value : & H , random_state : & RandomState ) -> u64 {
110+ random_state . hash_as_str ( value)
112111 }
113112}
114113
115114#[ cfg( feature = "specialize" ) ]
116115impl CallHasher for str {
117116 #[ inline]
118- fn get_hash < H : Hash + ?Sized , B : BuildHasher > ( value : & H , build_hasher : & B ) -> u64 {
119- build_hasher . hash_as_str ( value)
117+ fn get_hash < H : Hash + ?Sized > ( value : & H , random_state : & RandomState ) -> u64 {
118+ random_state . hash_as_str ( value)
120119 }
121120}
122121
123122#[ cfg( all( feature = "specialize" ) ) ]
124123impl CallHasher for String {
125124 #[ inline]
126- fn get_hash < H : Hash + ?Sized , B : BuildHasher > ( value : & H , build_hasher : & B ) -> u64 {
127- build_hasher . hash_as_str ( value)
125+ fn get_hash < H : Hash + ?Sized > ( value : & H , random_state : & RandomState ) -> u64 {
126+ random_state . hash_as_str ( value)
128127 }
129128}
130129
0 commit comments