mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-08 06:48:41 +00:00
force inline string compars
This commit is contained in:
committed by
Ryan Fleury
parent
98b7b5859c
commit
84d025e940
+10
-15
@@ -3076,43 +3076,38 @@ str8_deserial_read_sleb128(String8 string, U64 off, S64 *value_out)
|
|||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
|
|
||||||
internal int
|
force_inline int
|
||||||
str8_compar(String8 a, String8 b, B32 ignore_case)
|
str8_compar(String8 a, String8 b, B32 ignore_case)
|
||||||
{
|
{
|
||||||
int cmp = 0;
|
|
||||||
U64 size = Min(a.size, b.size);
|
U64 size = Min(a.size, b.size);
|
||||||
if (ignore_case)
|
int cmp = ignore_case ? MemCompareI(a.str, b.str, size) : MemCompare(a.str, b.str, size);
|
||||||
{
|
|
||||||
cmp = MemCompareI(a.str, b.str, size);
|
// normalize compar result
|
||||||
}
|
cmp = cmp > 0 ? 1 : cmp < 0 ? -1 : 0;
|
||||||
else
|
|
||||||
{
|
|
||||||
cmp = MemCompare(a.str, b.str, size);
|
|
||||||
cmp = cmp > 0 ? 1 : cmp < 0 ? -1 : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// shorter prefix must precede longer prefixes
|
// shorter prefix must precede longer prefixes
|
||||||
if (cmp == 0)
|
if (cmp == 0)
|
||||||
{
|
{
|
||||||
cmp = (a.size > b.size) - (b.size - a.size);
|
cmp = a.size < b.size ? -1 :
|
||||||
|
a.size > b.size ? +1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return cmp;
|
return cmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal int
|
force_inline int
|
||||||
str8_compar_ignore_case(const void *a, const void *b)
|
str8_compar_ignore_case(const void *a, const void *b)
|
||||||
{
|
{
|
||||||
return str8_compar(*(String8*)a, *(String8*)b, 1);
|
return str8_compar(*(String8*)a, *(String8*)b, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal int
|
force_inline int
|
||||||
str8_compar_case_sensitive(const void *a, const void *b)
|
str8_compar_case_sensitive(const void *a, const void *b)
|
||||||
{
|
{
|
||||||
return str8_compar(*(String8*)a, *(String8*)b, 0);
|
return str8_compar(*(String8*)a, *(String8*)b, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal int
|
force_inline int
|
||||||
str8_is_before_case_sensitive(const void *a, const void *b)
|
str8_is_before_case_sensitive(const void *a, const void *b)
|
||||||
{
|
{
|
||||||
int cmp = str8_compar_case_sensitive(a, b);
|
int cmp = str8_compar_case_sensitive(a, b);
|
||||||
|
|||||||
@@ -1845,7 +1845,7 @@ gsi_symbol_is_before(void *raw_a, void *raw_b)
|
|||||||
return is_before;
|
return is_before;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal int
|
force_inline int
|
||||||
gsi_pub_symbol_is_before(void *raw_a, void *raw_b)
|
gsi_pub_symbol_is_before(void *raw_a, void *raw_b)
|
||||||
{
|
{
|
||||||
CV_Symbol *a = *(CV_Symbol **)raw_a;
|
CV_Symbol *a = *(CV_Symbol **)raw_a;
|
||||||
@@ -1870,7 +1870,6 @@ gsi_pub_symbol_is_before(void *raw_a, void *raw_b)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
is_before = cmp < 0;
|
is_before = cmp < 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1888,10 +1887,8 @@ THREAD_POOL_TASK_FUNC(gsi_serialize_pub32)
|
|||||||
CV_SymbolList bucket = task->bucket_arr[bucket_idx];
|
CV_SymbolList bucket = task->bucket_arr[bucket_idx];
|
||||||
|
|
||||||
CV_Symbol **symbol_arr = push_array(scratch.arena, CV_Symbol *, bucket.count);
|
CV_Symbol **symbol_arr = push_array(scratch.arena, CV_Symbol *, bucket.count);
|
||||||
{
|
U64 symbol_arr_count = 0;
|
||||||
U64 i = 0;
|
for EachNode(n, CV_SymbolNode, bucket.first) { symbol_arr[symbol_arr_count++] = &n->data; }
|
||||||
for EachNode(n, CV_SymbolNode, bucket.first) { symbol_arr[i++] = &n->data; }
|
|
||||||
}
|
|
||||||
|
|
||||||
// sort symbols within bucket
|
// sort symbols within bucket
|
||||||
radsort(symbol_arr, bucket.count, gsi_pub_symbol_is_before);
|
radsort(symbol_arr, bucket.count, gsi_pub_symbol_is_before);
|
||||||
@@ -1906,10 +1903,10 @@ THREAD_POOL_TASK_FUNC(gsi_serialize_pub32)
|
|||||||
for EachIndex(i, bucket.count) {
|
for EachIndex(i, bucket.count) {
|
||||||
Assert(symbol_arr[i]->kind == CV_SymKind_PUB32);
|
Assert(symbol_arr[i]->kind == CV_SymKind_PUB32);
|
||||||
|
|
||||||
CV_SymPub32 *pub32 = (CV_SymPub32 *)symbol_arr[i]->data.str;
|
CV_SymPub32 *pub32 = (CV_SymPub32 *)symbol_arr[i]->data.str;
|
||||||
U8 *str_ptr = (U8 *)(pub32 + 1);
|
U8 *str_ptr = (U8 *)(pub32 + 1);
|
||||||
U64 str_size = symbol_arr[i]->data.size - sizeof(*pub32);
|
U64 str_cap = symbol_arr[i]->data.size - sizeof(*pub32);
|
||||||
String8 name = str8(str_ptr, str_size);
|
String8 name = str8_cstring_capped(str_ptr, str_ptr + str_cap);
|
||||||
|
|
||||||
// init sort record
|
// init sort record
|
||||||
PDB_GsiSortRecord *sr = &sort_record_arr[sort_idx];
|
PDB_GsiSortRecord *sr = &sort_record_arr[sort_idx];
|
||||||
|
|||||||
Reference in New Issue
Block a user