From e6d8fbf194b9559299c7d757de2e2c8ac4402e66 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 25 Sep 2021 17:30:18 +0100 Subject: [PATCH] Add `runtime.__get_map_header_runtime` --- core/runtime/dynamic_map_internal.odin | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/core/runtime/dynamic_map_internal.odin b/core/runtime/dynamic_map_internal.odin index b6545b53e..a665fe771 100644 --- a/core/runtime/dynamic_map_internal.odin +++ b/core/runtime/dynamic_map_internal.odin @@ -161,6 +161,28 @@ __get_map_header :: proc "contextless" (m: ^$T/map[$K]$V) -> Map_Header { return header } +__get_map_header_runtime :: proc "contextless" (m: ^Raw_Map, ti: Type_Info_Map) -> Map_Header { + header := Map_Header{m = m} + + header.equal = ti.key_equal + + entries := ti.generated_struct.variant.(Type_Info_Struct).types[1] + entry := entries.variant.(Type_Info_Dynamic_Array).elem + e := entry.variant.(Type_Info_Struct) + + header.entry_size = entry.size + header.entry_align = entry.align + + header.key_offset = e.offsets[2] + header.key_size = e.types[2].size + + header.value_offset = e.offsets[3] + header.value_size = e.types[3].size + + return header +} + + __slice_resize :: proc(array_: ^$T/[]$E, new_count: int, allocator: Allocator, loc := #caller_location) -> bool { array := (^Raw_Slice)(array_)