Files
Odin/core/sort/map.odin
T
2022-01-07 06:12:00 +01:00

36 lines
905 B
Odin

package sort
import "core:intrinsics"
import "core:runtime"
import "core:slice"
_ :: runtime
_ :: slice
map_entries_by_key :: proc(m: ^$M/map[$K]$V, loc := #caller_location) where intrinsics.type_is_ordered(K) {
Entry :: struct {
hash: uintptr,
next: int,
key: K,
value: V,
}
header := runtime.__get_map_header(m)
entries := (^[dynamic]Entry)(&header.m.entries)
slice.sort_by_key(entries[:], proc(e: Entry) -> K { return e.key })
runtime.__dynamic_map_reset_entries(header, loc)
}
map_entries_by_value :: proc(m: ^$M/map[$K]$V, loc := #caller_location) where intrinsics.type_is_ordered(V) {
Entry :: struct {
hash: uintptr,
next: int,
key: K,
value: V,
}
header := runtime.__get_map_header(m)
entries := (^[dynamic]Entry)(&header.m.entries)
slice.sort_by_key(entries[:], proc(e: Entry) -> V { return e.value })
runtime.__dynamic_map_reset_entries(header, loc)
}