Joe expansion
This commit is contained in:
parent
9d975eeceb
commit
8c4754b563
@ -46,8 +46,28 @@ MapDQCOaLDhS_try_add: [K, V, S]u1(MapDQCOaLDhS[K, V, S]* this, K* key, V* value)
|
||||
};
|
||||
|
||||
MapDQCOaLDhS_expand: [K, V, S]u1(MapDQCOaLDhS[K, V, S]* this) -> {
|
||||
/* Unimplemented. */
|
||||
return 0;
|
||||
S capacity = this.capacity;
|
||||
KVPair[K, V][?]* old_data = this.data;
|
||||
u8[?]* old_occupied = this.occupied;
|
||||
|
||||
S new_capacity = capacity * 2;
|
||||
this.capacity = new_capacity;
|
||||
this.data = calloc(new_capacity, @sizeof KVPair[K, V]);
|
||||
this.occupied = calloc(new_capacity, @sizeof((*this.occupied)[0]));
|
||||
|
||||
S i = 0;
|
||||
loop {
|
||||
if(i == capacity) {
|
||||
break;
|
||||
}
|
||||
if((*old_occupied)[i] != 0) {
|
||||
KVPair[K, V]* pair = &((*old_data)[i]);
|
||||
MapDQCOaLDhS_try_add[K, V, S](this, &pair.key, &pair.value);
|
||||
}
|
||||
i = i + 1;
|
||||
}
|
||||
|
||||
return 1;
|
||||
};
|
||||
|
||||
MapDQCOaLDhS_add: [K, V, S]u1(MapDQCOaLDhS[K, V, S]* this, K* key, V* value) -> {
|
||||
|
Loading…
Reference in New Issue
Block a user