Mercurial
diff dowa/d_memory.c @ 92:655ea0b661fd
[Seobeo] Added few endpoints for handling files. [Dowa] Added few functions for random number and generating uuids
| author | June Park <parkjune1995@gmail.com> |
|---|---|
| date | Fri, 02 Jan 2026 17:47:10 -0800 |
| parents | d39e8860a361 |
| children |
line wrap: on
line diff
--- a/dowa/d_memory.c Thu Jan 01 16:34:51 2026 -0800 +++ b/dowa/d_memory.c Fri Jan 02 17:47:10 2026 -0800 @@ -1,5 +1,9 @@ #include "dowa.h" +#ifndef DOWA_ALIGNMENT + #define DOWA_ALIGNMENT sizeof(void*) * 2 +#endif + // --- Arena --- // Dowa_Arena *Dowa_Arena_Create(size_t capacity) { @@ -23,7 +27,7 @@ void *Dowa_Arena_Allocate(Dowa_Arena *p_arena, size_t size) { - return Dowa_Arena_Allocate_Aligned(p_arena, size, sizeof(void*) * 2); + return Dowa_Arena_Allocate_Aligned(p_arena, size, DOWA_ALIGNMENT); } void Dowa_Arena_Free(Dowa_Arena *p_arena) @@ -85,9 +89,9 @@ return p_result; } -// --- NEW stb_ds-style Array Implementation --- // +// --- Array Implementation --- // -void* dowa__array_grow(void* p_array, size_t element_size, size_t minimum_capacity, Dowa_Arena* p_arena) +void *dowa__array_grow(void* p_array, size_t element_size, size_t minimum_capacity, Dowa_Arena* p_arena) { Dowa_Array_Header* p_header; size_t new_capacity; @@ -109,7 +113,7 @@ current_capacity = 0; } - // Calculate needed capacity: if minimum_capacity is 0, we need room for at least one more element + // if minimum_capacity is 0, we need room for at least one more element size_t needed_capacity = minimum_capacity; if (p_array && needed_capacity == 0) needed_capacity = p_header->length + 1; @@ -127,9 +131,7 @@ if (p_arena) { - // Array header and data must be properly aligned - size_t alignment = element_size >= 16 ? 16 : (element_size >= 8 ? 8 : element_size); - Dowa_Array_Header* p_new_header = (Dowa_Array_Header*)Dowa_Arena_Allocate_Aligned(p_arena, total_size, alignment); + Dowa_Array_Header* p_new_header = (Dowa_Array_Header*)Dowa_Arena_Allocate_Aligned(p_arena, total_size, DOWA_ALIGNMENT); if (!p_new_header) return p_array; @@ -191,7 +193,7 @@ free(p_header); } -// --- NEW stb_ds-style HashMap Implementation --- // +// --- HashMap Implementation --- // #define DOWA_HASH_EMPTY 0xFFFFFFFF #define DOWA_HASH_TOMBSTONE 0xFFFFFFFE @@ -219,7 +221,7 @@ return (Dowa_Hash_Index*)p_header->p_hash; } -static void* dowa__hashmap_find_slot(void* p_map, size_t element_size, void* p_key, size_t key_size, uint32 hash, boolean* p_found) +static void *dowa__hashmap_find_slot(void *p_map, size_t element_size, void *p_key, size_t key_size, uint32 hash, boolean *p_found) { Dowa_Hash_Index* p_index = dowa__hashmap_get_index(p_map); if (!p_index || !p_index->p_buckets) @@ -247,11 +249,11 @@ if (p_bucket->hash[i] == hash && p_bucket->index[i] != DOWA_HASH_TOMBSTONE) { uint32 array_index = p_bucket->index[i]; - char* p_element = (char*)p_map + (array_index * element_size); + char *p_element = (char*)p_map + (array_index * element_size); - char** p_stored_key_ptr = (char**)p_element; - char* p_stored_key = *p_stored_key_ptr; - char* p_search_key = (char*)p_key; + char **p_stored_key_ptr = (char**)p_element; + char *p_stored_key = *p_stored_key_ptr; + char *p_search_key = (char*)p_key; if (memcmp(p_stored_key, p_search_key, key_size) == 0) { @@ -272,7 +274,7 @@ return NULL; } -void* dowa__hashmap_get_ptr(void* p_map, size_t element_size, void* p_key, size_t key_size) +void *dowa__hashmap_get_ptr(void *p_map, size_t element_size, void *p_key, size_t key_size) { if (!p_map) return NULL; @@ -284,21 +286,21 @@ return found ? p_result : NULL; } -void* dowa__hashmap_get(void* p_map, size_t element_size, void* p_key, size_t key_size) +void *dowa__hashmap_get(void *p_map, size_t element_size, void *p_key, size_t key_size) { - void* p_kv = dowa__hashmap_get_ptr(p_map, element_size, p_key, key_size); + void *p_kv = dowa__hashmap_get_ptr(p_map, element_size, p_key, key_size); if (!p_kv) return NULL; return (char*)p_kv + key_size; } -boolean dowa__hashmap_has_key(void* p_map, size_t element_size, void* p_key, size_t key_size) +boolean dowa__hashmap_has_key(void *p_map, size_t element_size, void *p_key, size_t key_size) { return dowa__hashmap_get_ptr(p_map, element_size, p_key, key_size) != NULL; } -static void* dowa__hashmap_rehash(void* p_map, size_t element_size, size_t new_bucket_count, Dowa_Arena* p_arena) +static void* dowa__hashmap_rehash(void *p_map, size_t element_size, size_t new_bucket_count, Dowa_Arena* p_arena) { Dowa_Hash_Index* p_old_index = dowa__hashmap_get_index(p_map); if (!p_old_index) @@ -397,7 +399,7 @@ return p_map; } -void* dowa__hashmap_push(void* p_map, size_t element_size, void* p_key, size_t key_size, Dowa_Arena* p_arena) +void *dowa__hashmap_push(void *p_map, size_t element_size, void *p_key, size_t key_size, Dowa_Arena* p_arena) { uint32 hash = dowa__hash_bytes(p_key, key_size); @@ -541,7 +543,7 @@ return p_map; } -void dowa__hashmap_delete(void* p_map, size_t element_size, void* p_key, size_t key_size) +void dowa__hashmap_delete(void *p_map, size_t element_size, void *p_key, size_t key_size) { if (!p_map) return; @@ -592,7 +594,7 @@ } } -void dowa__hashmap_clear(void* p_map, size_t element_size) +void dowa__hashmap_clear(void *p_map, size_t element_size) { if (!p_map) return; @@ -616,7 +618,7 @@ } } -void dowa__hashmap_free(void* p_map) +void dowa__hashmap_free(void *p_map) { if (!p_map) return; @@ -632,7 +634,7 @@ dowa__array_free(p_map); } -size_t dowa__hashmap_count(void* p_map) +size_t dowa__hashmap_count(void *p_map) { if (!p_map) return 0;