add sort_by_indices overload and test

This commit is contained in:
Phil
2022-09-01 12:32:33 -07:00
parent 7a9b0731cf
commit 63eec25044
2 changed files with 27 additions and 1 deletions
+11 -1
View File
@@ -39,7 +39,9 @@ sort :: proc(data: $T/[]$E) where ORD(E) {
}
sort_by_indices :: proc(data: $T/[]$E, indices: []int, allocator := context.allocator) -> (sorted: T) {
sort_by_indices :: proc{ sort_by_indices_allocate, _sort_by_indices}
sort_by_indices_allocate :: proc(data: $T/[]$E, indices: []int, allocator := context.allocator) -> (sorted: T) {
assert(len(data) == len(indices))
sorted = make([]int, len(data), allocator)
for v, i in indices {
@@ -48,6 +50,14 @@ sort_by_indices :: proc(data: $T/[]$E, indices: []int, allocator := context.allo
return
}
_sort_by_indices :: proc(data, sorted: $T/[]$E, indices: []int) {
assert(len(data) == len(indices))
assert(len(data) == len(sorted))
for v, i in indices {
sorted[i] = data[v]
}
}
sort_by_indices_overwrite :: proc(data: $T/[]$E, indices: []int) {
assert(len(data) == len(indices))
temp := make([]int, len(data), context.allocator)