aboutsummaryrefslogtreecommitdiff
path: root/core/runtime
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2021-09-25 17:30:18 +0100
committergingerBill <bill@gingerbill.org>2021-09-25 17:30:18 +0100
commite6d8fbf194b9559299c7d757de2e2c8ac4402e66 (patch)
treedabeb36f8ac4796f40dee55b4c2bc186f2a2161f /core/runtime
parent6fa3c992b5259d2e53f033e236bed998bebcd031 (diff)
Add `runtime.__get_map_header_runtime`
Diffstat (limited to 'core/runtime')
-rw-r--r--core/runtime/dynamic_map_internal.odin22
1 files changed, 22 insertions, 0 deletions
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_)