@@ -46,18 +46,16 @@ fn mk_hashmap[K, V](&hashfn[K] hasher, &eqfn[K] eqer) -> hashmap[K, V] {
46
46
// is always a power of 2), so that all buckets are probed for a
47
47
// fixed key.
48
48
49
- fn hashl[ K ] ( & hashfn [ K ] hasher , uint nbkts, & K key ) -> uint {
50
- ret ( hasher ( key ) >>> ( sys . rustrt . size_of [ uint ] ( ) * 8 u / 2 u ) ) ;
49
+ fn hashl ( uint n , uint nbkts ) -> uint {
50
+ ret ( n >>> 16 u ) ;
51
51
}
52
52
53
- fn hashr[ K ] ( & hashfn[ K ] hasher, uint nbkts, & K key) -> uint {
54
- ret ( ( ( ( ~ 0 u) >>> ( sys. rustrt . size_of [ uint] ( ) * 8 u / 2 u) )
55
- & hasher ( key) ) * 2 u + 1 u) ;
53
+ fn hashr ( uint n, uint nbkts ) -> uint {
54
+ ret ( ( ( ( ~ 0 u) >>> 16 u) & n) * 2 u + 1 u) ;
56
55
}
57
56
58
- fn hash[ K ] ( & hashfn[ K ] hasher, uint nbkts, & K key, uint i) -> uint {
59
- ret ( hashl[ K ] ( hasher, nbkts, key)
60
- + i * hashr[ K ] ( hasher, nbkts, key) ) % nbkts;
57
+ fn hash ( uint h, uint nbkts , uint i) -> uint {
58
+ ret ( hashl ( h, nbkts) + i * hashr ( h, nbkts) ) % nbkts;
61
59
}
62
60
63
61
/**
@@ -73,8 +71,9 @@ fn mk_hashmap[K, V](&hashfn[K] hasher, &eqfn[K] eqer) -> hashmap[K, V] {
73
71
-> bool
74
72
{
75
73
let uint i = 0 u;
74
+ let uint h = hasher ( key) ;
76
75
while ( i < nbkts) {
77
- let uint j = hash[ K ] ( hasher , nbkts, key , i) ;
76
+ let uint j = hash ( h , nbkts, i) ;
78
77
alt ( bkts. ( j) ) {
79
78
case ( some[ K , V ] ( ?k, _) ) {
80
79
if ( eqer ( key, k) ) {
@@ -100,8 +99,9 @@ fn mk_hashmap[K, V](&hashfn[K] hasher, &eqfn[K] eqer) -> hashmap[K, V] {
100
99
-> option. t [ V ]
101
100
{
102
101
let uint i = 0 u;
102
+ let uint h = hasher ( key) ;
103
103
while ( i < nbkts) {
104
- let uint j = ( hash[ K ] ( hasher , nbkts, key , i) ) ;
104
+ let uint j = ( hash ( h , nbkts, i) ) ;
105
105
alt ( bkts. ( j) ) {
106
106
case ( some[ K , V ] ( ?k, ?v) ) {
107
107
if ( eqer ( key, k) ) {
@@ -189,8 +189,9 @@ fn mk_hashmap[K, V](&hashfn[K] hasher, &eqfn[K] eqer) -> hashmap[K, V] {
189
189
190
190
fn remove ( & K key ) -> option. t[ V ] {
191
191
let uint i = 0 u;
192
+ let uint h = hasher ( key) ;
192
193
while ( i < nbkts) {
193
- let uint j = ( hash[ K ] ( hasher , nbkts, key , i) ) ;
194
+ let uint j = ( hash ( h , nbkts, i) ) ;
194
195
alt ( bkts. ( j) ) {
195
196
case ( some[ K , V ] ( ?k, ?v) ) {
196
197
if ( eqer ( key, k) ) {
0 commit comments