mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-07 14:28:40 +00:00
binary search for U64 and Rng1U64 arrays
This commit is contained in:
@@ -602,3 +602,37 @@ ring_read(U8 *ring_base, U64 ring_size, U64 ring_pos, void *dst_data, U64 read_s
|
|||||||
}
|
}
|
||||||
return read_size;
|
return read_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////
|
||||||
|
|
||||||
|
internal U64
|
||||||
|
u64_array_bsearch(U64 *arr, U64 count, U64 value)
|
||||||
|
{
|
||||||
|
if(count > 1 && arr[0] <= value && value < arr[count-1])
|
||||||
|
{
|
||||||
|
U64 l = 0;
|
||||||
|
U64 r = count - 1;
|
||||||
|
for(; l <= r; )
|
||||||
|
{
|
||||||
|
U64 m = l + (r - l) / 2;
|
||||||
|
if(arr[m] == value)
|
||||||
|
{
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
else if(arr[m] < value)
|
||||||
|
{
|
||||||
|
l = m + 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
r = m - 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (count == 1 && arr[0] == value)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return max_U64;
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -885,4 +885,8 @@ internal U64 ring_read(U8 *ring_base, U64 ring_size, U64 ring_pos, void *dst_dat
|
|||||||
|
|
||||||
#define quick_sort(ptr, count, element_size, cmp_function) qsort((ptr), (count), (element_size), (int (*)(const void *, const void *))(cmp_function))
|
#define quick_sort(ptr, count, element_size, cmp_function) qsort((ptr), (count), (element_size), (int (*)(const void *, const void *))(cmp_function))
|
||||||
|
|
||||||
|
////////////////////////////////
|
||||||
|
|
||||||
|
internal U64 u64_array_bsearch(U64 *arr, U64 count, U64 value);
|
||||||
|
|
||||||
#endif // BASE_CORE_H
|
#endif // BASE_CORE_H
|
||||||
|
|||||||
@@ -634,6 +634,37 @@ rng1u64_array_from_list(Arena *arena, Rng1U64List *list)
|
|||||||
return arr;
|
return arr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal U64
|
||||||
|
rng_1u64_array_bsearch(Rng1U64Array arr, U64 value)
|
||||||
|
{
|
||||||
|
if(arr.count > 0 && arr.v[0].min <= value && value < arr.v[arr.count-1].max)
|
||||||
|
{
|
||||||
|
U64 l = 0;
|
||||||
|
U64 r = arr.count - 1;
|
||||||
|
for(; l <= r; )
|
||||||
|
{
|
||||||
|
U64 m = l + (r - l) / 2;
|
||||||
|
if(contains_1u64(arr.v[m], value))
|
||||||
|
{
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
else if(arr.v[m].min < value)
|
||||||
|
{
|
||||||
|
l = m + 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
r = m - 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(arr.count == 1 && contains_1u64(arr.v[0], value))
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return max_U64;
|
||||||
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
rng1s64_list_push(Arena *arena, Rng1S64List *list, Rng1S64 rng)
|
rng1s64_list_push(Arena *arena, Rng1S64List *list, Rng1S64 rng)
|
||||||
{
|
{
|
||||||
@@ -657,3 +688,4 @@ rng1s64_array_from_list(Arena *arena, Rng1S64List *list)
|
|||||||
}
|
}
|
||||||
return arr;
|
return arr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -668,6 +668,7 @@ internal U32 u32_from_rgba(Vec4F32 rgba);
|
|||||||
internal void rng1u64_list_push(Arena *arena, Rng1U64List *list, Rng1U64 rng);
|
internal void rng1u64_list_push(Arena *arena, Rng1U64List *list, Rng1U64 rng);
|
||||||
internal void rng1u64_list_concat(Rng1U64List *list, Rng1U64List *to_concat);
|
internal void rng1u64_list_concat(Rng1U64List *list, Rng1U64List *to_concat);
|
||||||
internal Rng1U64Array rng1u64_array_from_list(Arena *arena, Rng1U64List *list);
|
internal Rng1U64Array rng1u64_array_from_list(Arena *arena, Rng1U64List *list);
|
||||||
|
internal U64 rng_1u64_array_bsearch(Rng1U64Array arr, U64 value);
|
||||||
|
|
||||||
internal void rng1s64_list_push(Arena *arena, Rng1S64List *list, Rng1S64 rng);
|
internal void rng1s64_list_push(Arena *arena, Rng1S64List *list, Rng1S64 rng);
|
||||||
internal Rng1S64Array rng1s64_array_from_list(Arena *arena, Rng1S64List *list);
|
internal Rng1S64Array rng1s64_array_from_list(Arena *arena, Rng1S64List *list);
|
||||||
|
|||||||
Reference in New Issue
Block a user