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) -> {
|
MapDQCOaLDhS_expand: [K, V, S]u1(MapDQCOaLDhS[K, V, S]* this) -> {
|
||||||
/* Unimplemented. */
|
S capacity = this.capacity;
|
||||||
return 0;
|
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) -> {
|
MapDQCOaLDhS_add: [K, V, S]u1(MapDQCOaLDhS[K, V, S]* this, K* key, V* value) -> {
|
||||||
|
Loading…
Reference in New Issue
Block a user