diff options
| author | gingerBill <bill@gingerbill.org> | 2023-12-13 01:24:03 +0000 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2023-12-13 01:24:03 +0000 |
| commit | c8cc13074449a5220e1faf2b97271385f2a1309e (patch) | |
| tree | 6ea90182047cfce239abaca6051cb02a89c77667 | |
| parent | fe0244606b89edfbe9068008191b03f05c2c16b3 (diff) | |
Fix the implementation of `binary_search_by` to work with a normal `ordering` call, rather than the backwards version.
WHY THE HECK WAS IT THIS WAY IN THE FIRST PLACE?!
| -rw-r--r-- | core/slice/slice.odin | 16 |
1 files changed, 4 insertions, 12 deletions
diff --git a/core/slice/slice.odin b/core/slice/slice.odin index 216050eb1..e16dabf0f 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: right = mid + case .Greater: left = mid + 1 } size = right - left |