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;