aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2023-12-13 01:17:48 +0000
committergingerBill <bill@gingerbill.org>2023-12-13 01:18:05 +0000
commit036fa6482ccc6d4eb7562e2a5a4af566ea05eb90 (patch)
tree84178408e07265302fbde9a69d12add56a7219bf
parent04ca22b9ea66c943f14b46eb1be3e3c6f7952ba6 (diff)
Use `cmp_proc` in `binary_search`
-rw-r--r--core/slice/slice.odin16
1 files changed, 4 insertions, 12 deletions
diff --git a/core/slice/slice.odin b/core/slice/slice.odin
index 216050eb1..eea571a80 100644
--- a/core/slice/slice.odin
+++ b/core/slice/slice.odin
@@ -158,15 +158,7 @@ linear_search_proc :: proc(array: $A/[]$T, f: proc(T) -> bool) -> (index: int, f
binary_search :: proc(array: $A/[]$T, key: T) -> (index: int, found: bool)
where intrinsics.type_is_ordered(T) #no_bounds_check
{
- // I would like to use binary_search_by(array, key, cmp) here, but it doesn't like it:
- // Cannot assign value 'cmp' of type 'proc($E, $E) -> Ordering' to 'proc(i32, i32) -> Ordering' in argument
- return binary_search_by(array, key, proc(key: T, element: T) -> Ordering {
- switch {
- case element < key: return .Less
- case element > key: return .Greater
- case: return .Equal
- }
- })
+ return binary_search_by(array, key, cmp_proc(T))
}
@(require_results)
@@ -194,9 +186,9 @@ binary_search_by :: proc(array: $A/[]$T, key: T, f: proc(T, T) -> Ordering) -> (
right = mid if cmp == .Greater else right
switch cmp {
- case .Equal: return mid, true
- case .Less: left = mid + 1
- case .Greater: right = mid
+ case .Equal: return mid, true
+ case .Less: left = mid + 1
+ case .Greater: right = mid
}
size = right - left