mirror of
https://github.com/Ed94/Odin.git
synced 2026-06-13 09:22:22 -07:00
36 lines
905 B
Odin
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)
|
|
} |