mirror of
https://github.com/odin-lang/Odin.git
synced 2026-04-29 09:43:56 +00:00
Deprecate sort.slice and sort.reverse_slice
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package sort
|
||||
|
||||
import "core:mem"
|
||||
import _slice "core:slice"
|
||||
import "intrinsics"
|
||||
|
||||
_ :: intrinsics;
|
||||
@@ -29,9 +30,11 @@ sort :: proc(it: Interface) {
|
||||
}
|
||||
|
||||
|
||||
@(deprecated="use slice.sort")
|
||||
slice :: proc(array: $T/[]$E) where ORD(E) {
|
||||
s := array;
|
||||
sort(slice_interface(&s));
|
||||
_slice.sort(array);
|
||||
// s := array;
|
||||
// sort(slice_interface(&s));
|
||||
}
|
||||
|
||||
slice_interface :: proc(s: ^$T/[]$E) -> Interface where ORD(E) {
|
||||
@@ -76,7 +79,10 @@ reverse_sort :: proc(it: Interface) {
|
||||
sort(reverse_interface(&it));
|
||||
}
|
||||
|
||||
@(deprecated="use slice.reverse")
|
||||
reverse_slice :: proc(array: $T/[]$E) where ORD(E) {
|
||||
_slice.reverse(array);
|
||||
/*
|
||||
s := array;
|
||||
sort(Interface{
|
||||
collection = rawptr(&s),
|
||||
@@ -93,6 +99,7 @@ reverse_slice :: proc(array: $T/[]$E) where ORD(E) {
|
||||
s[i], s[j] = s[j], s[i];
|
||||
},
|
||||
});
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
@@ -678,55 +685,3 @@ compare_strings :: proc(a, b: string) -> int {
|
||||
y := transmute(mem.Raw_String)b;
|
||||
return mem.compare_byte_ptrs(x.data, y.data, min(x.len, y.len));
|
||||
}
|
||||
|
||||
|
||||
@(deprecated="use slice.binary_search")
|
||||
binary_search :: proc(array: $A/[]$T, key: T) -> (index: int, found: bool)
|
||||
where intrinsics.type_is_ordered(T) #no_bounds_check {
|
||||
|
||||
n := len(array);
|
||||
switch n {
|
||||
case 0:
|
||||
return -1, false;
|
||||
case 1:
|
||||
if array[0] == key {
|
||||
return 0, true;
|
||||
}
|
||||
return -1, false;
|
||||
}
|
||||
|
||||
lo, hi := 0, n-1;
|
||||
|
||||
for array[hi] != array[lo] && key >= array[lo] && key <= array[hi] {
|
||||
when intrinsics.type_is_ordered_numeric(T) {
|
||||
// NOTE(bill): This is technically interpolation search
|
||||
m := lo + int((key - array[lo]) * T(hi - lo) / (array[hi] - array[lo]));
|
||||
} else {
|
||||
m := (lo + hi)/2;
|
||||
}
|
||||
switch {
|
||||
case array[m] < key:
|
||||
lo = m + 1;
|
||||
case key < array[m]:
|
||||
hi = m - 1;
|
||||
case:
|
||||
return m, true;
|
||||
}
|
||||
}
|
||||
|
||||
if key == array[lo] {
|
||||
return lo, true;
|
||||
}
|
||||
return -1, false;
|
||||
}
|
||||
|
||||
@(deprecated="use slice.linear_search")
|
||||
linear_search :: proc(array: $A/[]$T, key: T) -> (index: int, found: bool)
|
||||
where intrinsics.type_is_comparable(T) #no_bounds_check {
|
||||
for x, i in array {
|
||||
if x == key {
|
||||
return i, true;
|
||||
}
|
||||
}
|
||||
return -1, false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user