mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 23:58:50 +00:00
Remove context._internal usage
This commit is contained in:
+39
-24
@@ -325,36 +325,59 @@ reverse_sort :: proc(data: $T/[]$E) where ORD(E) {
|
|||||||
|
|
||||||
|
|
||||||
reverse_sort_by :: proc(data: $T/[]$E, less: proc(i, j: E) -> bool) {
|
reverse_sort_by :: proc(data: $T/[]$E, less: proc(i, j: E) -> bool) {
|
||||||
context._internal = rawptr(less)
|
sort_by_with_data(data, proc(i, j: E, user_data: rawptr) -> bool {
|
||||||
sort_by(data, proc(i, j: E) -> bool {
|
less := (proc(E, E) -> bool)(user_data)
|
||||||
k := (proc(i, j: E) -> bool)(context._internal)
|
return less(j, i)
|
||||||
return k(j, i)
|
}, rawptr(less))
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
reverse_sort_by_cmp :: proc(data: $T/[]$E, cmp: proc(i, j: E) -> Ordering) {
|
reverse_sort_by_cmp :: proc(data: $T/[]$E, cmp: proc(i, j: E) -> Ordering) {
|
||||||
context._internal = rawptr(cmp)
|
context._internal = rawptr(cmp)
|
||||||
sort_by_cmp(data, proc(i, j: E) -> Ordering {
|
sort_by_cmp_with_data(data, proc(i, j: E, user_data: rawptr) -> Ordering {
|
||||||
k := (proc(i, j: E) -> Ordering)(context._internal)
|
k := (proc(i, j: E) -> Ordering)(user_data)
|
||||||
return k(j, i)
|
return k(j, i)
|
||||||
})
|
}, rawptr(data))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// TODO(bill): Should `sort_by_key` exist or is `sort_by` more than enough?
|
// TODO(bill): Should `sort_by_key` exist or is `sort_by` more than enough?
|
||||||
sort_by_key :: proc(data: $T/[]$E, key: proc(E) -> $K) where ORD(K) {
|
sort_by_key :: proc(data: $T/[]$E, key: proc(E) -> $K) where ORD(K) {
|
||||||
context._internal = rawptr(key)
|
Context :: struct {
|
||||||
sort_by(data, proc(i, j: E) -> bool {
|
key: proc(E) -> K,
|
||||||
k := (proc(E) -> K)(context._internal)
|
}
|
||||||
return k(i) < k(j)
|
ctx := &Context{key}
|
||||||
|
|
||||||
|
sort_by_generic_cmp(data, proc(lhs, rhs: rawptr, user_data: rawptr) -> Ordering {
|
||||||
|
x, y := (^E)(lhs)^, (^E)(rhs)^
|
||||||
|
|
||||||
|
ctx := (^Context)(user_data)
|
||||||
|
a := k(i)
|
||||||
|
b := k(j)
|
||||||
|
switch {
|
||||||
|
case a < b: return .Less
|
||||||
|
case a > b: return .Greater
|
||||||
|
}
|
||||||
|
return .Equal
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
reverse_sort_by_key :: proc(data: $T/[]$E, key: proc(E) -> $K) where ORD(K) {
|
reverse_sort_by_key :: proc(data: $T/[]$E, key: proc(E) -> $K) where ORD(K) {
|
||||||
context._internal = rawptr(key)
|
Context :: struct {
|
||||||
sort_by(data, proc(i, j: E) -> bool {
|
key: proc(E) -> K,
|
||||||
k := (proc(E) -> K)(context._internal)
|
}
|
||||||
return k(j) < k(i)
|
ctx := &Context{key}
|
||||||
|
|
||||||
|
sort_by_generic_cmp(data, proc(lhs, rhs: rawptr, user_data: rawptr) -> Ordering {
|
||||||
|
x, y := (^E)(lhs)^, (^E)(rhs)^
|
||||||
|
|
||||||
|
ctx := (^Context)(user_data)
|
||||||
|
a := k(i)
|
||||||
|
b := k(j)
|
||||||
|
switch {
|
||||||
|
case a < b: return .Greater
|
||||||
|
case a > b: return .Less
|
||||||
|
}
|
||||||
|
return .Equal
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -367,11 +390,3 @@ is_sorted_by_key :: proc(array: $T/[]$E, key: proc(E) -> $K) -> bool where ORD(K
|
|||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
@(private, require_results)
|
|
||||||
_max_depth :: proc(n: int) -> (depth: int) { // 2*ceil(log2(n+1))
|
|
||||||
for i := n; i > 0; i >>= 1 {
|
|
||||||
depth += 1
|
|
||||||
}
|
|
||||||
return depth * 2
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user