|
@@ -6,7 +6,7 @@ _ :: runtime;
|
|
_ :: mem;
|
|
_ :: mem;
|
|
|
|
|
|
Map_Entry_Info :: struct(Key, Value: typeid) {
|
|
Map_Entry_Info :: struct(Key, Value: typeid) {
|
|
- hash: u64,
|
|
|
|
|
|
+ hash: uintptr,
|
|
key: Key,
|
|
key: Key,
|
|
value: Value,
|
|
value: Value,
|
|
}
|
|
}
|
|
@@ -19,7 +19,8 @@ map_entry_info_slice :: proc(m: $M/map[$K]$V, allocator := context.allocator) ->
|
|
gs := type_info_base(info.generated_struct).variant.(Type_Info_Struct);
|
|
gs := type_info_base(info.generated_struct).variant.(Type_Info_Struct);
|
|
ed := type_info_base(gs.types[1]).variant.(Type_Info_Dynamic_Array);
|
|
ed := type_info_base(gs.types[1]).variant.(Type_Info_Dynamic_Array);
|
|
entry_type := ed.elem.variant.(Type_Info_Struct);
|
|
entry_type := ed.elem.variant.(Type_Info_Struct);
|
|
- value_offset := entry_type.offsets[2];
|
|
|
|
|
|
+ key_offset := entry_type.offsets[2];
|
|
|
|
+ value_offset := entry_type.offsets[3];
|
|
entry_size := uintptr(ed.elem_size);
|
|
entry_size := uintptr(ed.elem_size);
|
|
|
|
|
|
entries = make(type_of(entries), rm.entries.len);
|
|
entries = make(type_of(entries), rm.entries.len);
|
|
@@ -28,8 +29,8 @@ map_entry_info_slice :: proc(m: $M/map[$K]$V, allocator := context.allocator) ->
|
|
for i in 0..<rm.entries.len {
|
|
for i in 0..<rm.entries.len {
|
|
header := (^runtime.Map_Entry_Header)(data);
|
|
header := (^runtime.Map_Entry_Header)(data);
|
|
|
|
|
|
- hash := header.key.hash;
|
|
|
|
- key := (^K)(&header.key.key)^;
|
|
|
|
|
|
+ hash := header.hash;
|
|
|
|
+ key := (^K)(data + key_offset)^;
|
|
value := (^V)(data + value_offset)^;
|
|
value := (^V)(data + value_offset)^;
|
|
|
|
|
|
entries[i] = {hash, key, value};
|
|
entries[i] = {hash, key, value};
|