Fix: map key not getting transferred on rehash

This commit is contained in:
Ginger Bill
2017-04-11 23:11:05 +01:00
parent 8e73d1ce1f
commit 627ee002e8
2 changed files with 4 additions and 8 deletions
+3 -4
View File
@@ -592,14 +592,13 @@ __dynamic_map_reserve :: proc(using header: __Map_Header, cap: int) {
} }
__dynamic_map_rehash :: proc(using header: __Map_Header, new_count: int) { __dynamic_map_rehash :: proc(using header: __Map_Header, new_count: int) {
new_header := header; new_header: __Map_Header = header;
nm: raw.Dynamic_Map; nm: raw.Dynamic_Map;
new_header.m = ^nm; new_header.m = ^nm;
header_hashes := cast(^raw.Dynamic_Array)^header.m.hashes; header_hashes := cast(^raw.Dynamic_Array)^header.m.hashes;
nm_hashes := cast(^raw.Dynamic_Array)^nm.hashes; nm_hashes := cast(^raw.Dynamic_Array)^nm.hashes;
__dynamic_array_resize(nm_hashes, size_of(int), align_of(int), new_count); __dynamic_array_resize(nm_hashes, size_of(int), align_of(int), new_count);
__dynamic_array_reserve(^nm.entries, entry_size, entry_align, m.entries.len); __dynamic_array_reserve(^nm.entries, entry_size, entry_align, m.entries.len);
for i in 0..new_count { for i in 0..new_count {
@@ -611,7 +610,7 @@ __dynamic_map_rehash :: proc(using header: __Map_Header, new_count: int) {
__dynamic_map_grow(new_header); __dynamic_map_grow(new_header);
} }
entry_header := __dynamic_map_get_entry(new_header, i); entry_header := __dynamic_map_get_entry(header, i);
data := cast(^byte)entry_header; data := cast(^byte)entry_header;
fr := __dynamic_map_find(new_header, entry_header.key); fr := __dynamic_map_find(new_header, entry_header.key);
@@ -626,7 +625,7 @@ __dynamic_map_rehash :: proc(using header: __Map_Header, new_count: int) {
e := __dynamic_map_get_entry(new_header, j); e := __dynamic_map_get_entry(new_header, j);
e.next = fr.entry_index; e.next = fr.entry_index;
ndata := cast(^byte)e; ndata := cast(^byte)e;
__mem_copy(ndata+value_offset, data+value_offset, entry_size-value_offset); __mem_copy(ndata+value_offset, data+value_offset, value_size);
if __dynamic_map_full(new_header) { if __dynamic_map_full(new_header) {
__dynamic_map_grow(new_header); __dynamic_map_grow(new_header);
+1 -4
View File
@@ -3622,14 +3622,11 @@ b32 gb_is_power_of_two(isize x) {
gb_inline void *gb_align_forward(void *ptr, isize alignment) { gb_inline void *gb_align_forward(void *ptr, isize alignment) {
uintptr p; uintptr p;
isize modulo;
GB_ASSERT(gb_is_power_of_two(alignment)); GB_ASSERT(gb_is_power_of_two(alignment));
p = cast(uintptr)ptr; p = cast(uintptr)ptr;
modulo = p & (alignment-1); return cast(void *)((p + (alignment-1)) &~ (alignment-1));
if (modulo) p += (alignment - modulo);
return cast(void *)p;
} }