mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-06 22:08:41 +00:00
binary search for strings
This commit is contained in:
committed by
Ryan Fleury
parent
00536f7ea8
commit
7193986305
@@ -21,3 +21,35 @@ str8_list_pop_front(String8List *list)
|
|||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal U64
|
||||||
|
str8_array_bsearch(String8Array arr, String8 value)
|
||||||
|
{
|
||||||
|
if (arr.count > 1) {
|
||||||
|
int lo_compar = str8_compar_case_sensitive(&value, &arr.v[0]);
|
||||||
|
if (lo_compar == 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int hi_compar = str8_compar_case_sensitive(&value, &arr.v[arr.count-1]);
|
||||||
|
if (hi_compar == 0){
|
||||||
|
return arr.count-1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lo_compar > 0 && hi_compar < 0) {
|
||||||
|
for (U64 l = 0, r = arr.count -1; l <= r; ) {
|
||||||
|
U64 m = l + (r- l) / 2;
|
||||||
|
int cmp = str8_compar_case_sensitive(&arr.v[m], &value);
|
||||||
|
if (cmp == 0) {
|
||||||
|
return m;
|
||||||
|
} else if (cmp < 0) {
|
||||||
|
l = m + 1;
|
||||||
|
} else {
|
||||||
|
r = m - 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (arr.count == 1 && str8_match(arr.v[0], value, 0)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return max_U64;
|
||||||
|
}
|
||||||
|
|||||||
@@ -8,3 +8,4 @@ internal String8Node * str8_list_pop_front(String8List *list);
|
|||||||
|
|
||||||
internal B32 str8_starts_with(String8 string, String8 expected_prefix);
|
internal B32 str8_starts_with(String8 string, String8 expected_prefix);
|
||||||
|
|
||||||
|
internal U64 str8_array_bsearch(String8Array arr, String8 value);
|
||||||
|
|||||||
Reference in New Issue
Block a user