WIP: reorder input and library search order to match MSVC behavior

This commit is contained in:
Nikita Smith
2025-09-05 15:19:30 -07:00
committed by Ryan Fleury
parent 240935f0cc
commit 1aac27095e
15 changed files with 1652 additions and 1617 deletions
+52 -11
View File
@@ -211,11 +211,18 @@ hash_table_search_u64(HashTable *ht, U64 key_u64)
return 0;
}
internal void *
hash_table_search_u64_raw(HashTable *ht, U64 key_u64)
internal KeyValuePair *
hash_table_search_raw(HashTable *ht, void *key)
{
KeyValuePair *kv = hash_table_search_u64(ht, key_u64);
return kv ? kv->value_raw : 0;
U64 hash = hash_table_hasher(str8_struct(&key));
U64 ibucket = hash % ht->cap;
BucketList *bucket = ht->buckets + ibucket;
for (BucketNode *n = bucket->first; n != 0; n = n->next) {
if (n->v.key_raw == key) {
return &n->v;
}
}
return 0;
}
internal KeyValuePair *
@@ -230,13 +237,6 @@ hash_table_search_path(HashTable *ht, String8 path)
return result;
}
internal void *
hash_table_search_path_raw(HashTable *ht, String8 path)
{
KeyValuePair *kv = hash_table_search_path(ht, path);
return kv ? kv->value_raw : 0;
}
internal B32
hash_table_search_path_u64(HashTable *ht, String8 key, U64 *value_out)
{
@@ -250,6 +250,27 @@ hash_table_search_path_u64(HashTable *ht, String8 key, U64 *value_out)
return 0;
}
internal void *
hash_table_search_u64_raw(HashTable *ht, U64 key_u64)
{
KeyValuePair *kv = hash_table_search_u64(ht, key_u64);
return kv ? kv->value_raw : 0;
}
internal void *
hash_table_search_path_raw(HashTable *ht, String8 path)
{
KeyValuePair *kv = hash_table_search_path(ht, path);
return kv ? kv->value_raw : 0;
}
internal void *
hash_table_search_raw_raw(HashTable *ht, void *key)
{
KeyValuePair *kv = hash_table_search_raw(ht, key);
return kv ? kv->value_raw : 0;
}
internal B32
hash_table_search_string_u64(HashTable *ht, String8 key, U64 *value_out)
{
@@ -283,6 +304,13 @@ hash_table_push_u32_u32(Arena *arena, HashTable *ht, U32 key, U32 value)
return hash_table_push(arena, ht, hash, (KeyValuePair){ .key_u32 = key, .value_u32 = value });
}
internal BucketNode *
hash_table_push_raw_raw(Arena *arena, HashTable *ht, void *key, void *value)
{
U64 hash = hash_table_hasher(str8_struct(&key));
return hash_table_push(arena, ht, hash, (KeyValuePair){ .key_raw = key, .value_raw = value });
}
internal B32
hash_table_search_string_string(HashTable *ht, String8 key, String8 *value_out)
{
@@ -381,6 +409,19 @@ key_value_pairs_from_hash_table(Arena *arena, HashTable *ht)
return pairs;
}
internal void *
keys_from_hash_table_raw(Arena *arena, HashTable *ht)
{
void **result = push_array(arena, void *, ht->count);
for (U64 bucket_idx = 0, cursor = 0; bucket_idx < ht->cap; ++bucket_idx) {
for (BucketNode *n = ht->buckets[bucket_idx].first; n != 0; n = n->next) {
Assert(cursor < ht->count);
result[cursor++] = n->v.key_raw;
}
}
return result;
}
internal void *
values_from_hash_table_raw(Arena *arena, HashTable *ht)
{