@@ -13,7 +13,7 @@ type hashfn[K] = fn(&K) -> uint;
13
13
type eqfn [ K ] = fn ( & K , & K ) -> bool;
14
14
15
15
type hashmap [ K , V ] = obj {
16
- fn insert( & K key, & V val) ;
16
+ fn insert( & K key, & V val) -> bool ;
17
17
fn contains_key ( & K key ) -> bool ;
18
18
fn get ( & K key ) -> V ;
19
19
fn find ( & K key ) -> util. option[ V ] ;
@@ -80,6 +80,7 @@ fn mk_hashmap[K, V](&hashfn[K] hasher, &eqfn[K] eqer) -> hashmap[K, V] {
80
80
alt ( bkts. ( j) ) {
81
81
case ( some[ K , V ] ( k, _) ) {
82
82
if ( eqer ( key, k) ) {
83
+ bkts. ( j) = some[ K , V ] ( k, val) ;
83
84
ret false;
84
85
}
85
86
i += 1 u;
@@ -143,7 +144,7 @@ fn mk_hashmap[K, V](&hashfn[K] hasher, &eqfn[K] eqer) -> hashmap[K, V] {
143
144
mutable uint nelts,
144
145
util. rational lf)
145
146
{
146
- fn insert ( & K key , & V val ) {
147
+ fn insert ( & K key , & V val ) -> bool {
147
148
let util. rational load = rec ( num=( nelts + 1 u) as int , den=nbkts as int ) ;
148
149
if ( !util. rational_leq ( load, lf) ) {
149
150
let uint nnewbkts = _int. next_power_of_two ( nbkts + 1 u) ;
@@ -154,8 +155,11 @@ fn mk_hashmap[K, V](&hashfn[K] hasher, &eqfn[K] eqer) -> hashmap[K, V] {
154
155
let vec[ mutable bucket[ K , V ] ] newbkts = make_buckets[ K , V ] ( nnewbkts) ;
155
156
rehash[ K , V ] ( hasher, eqer, bkts, nbkts, newbkts, nnewbkts) ;
156
157
}
157
- insert_common[ K , V ] ( hasher, eqer, bkts, nbkts, key, val) ;
158
- nelts += 1 u;
158
+ if ( insert_common[ K , V ] ( hasher, eqer, bkts, nbkts, key, val) ) {
159
+ nelts += 1 u;
160
+ ret true;
161
+ }
162
+ ret false;
159
163
}
160
164
161
165
fn contains_key ( & K key ) -> bool {
0 commit comments