diff dowa/dowa.h @ 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 4b96794c8d59
children 70401cf61e97
line wrap: on
line diff
--- a/dowa/dowa.h	Thu Jan 01 16:34:51 2026 -0800
+++ b/dowa/dowa.h	Fri Jan 02 17:47:10 2026 -0800
@@ -1,18 +1,12 @@
 #ifndef DOWA
 #define DOWA
 
-#include <stdio.h>
+#include <stdio.h> // printfs...
 #include <string.h> // strdup, strlen, memcmp, memcpy
 #include <stdlib.h> // malloc, free, realloc
 #include <assert.h> // mostly for TODO
 #include <stddef.h> // size_t
 
-#ifdef DIRECTORY
-// Only for linux and mac since window do not support.
-// Maybe move this into seobeo file directly?
-#include <dirent.h> // some functions loop through files
-#endif
-
 #include <math.h> // I am not re-writing stuff I guess...
 
 #include <sys/stat.h>
@@ -47,7 +41,6 @@
   }                       \
 } while (0)
 
-// Fixed-width integer types
 typedef unsigned long long   uint64;
 typedef long long            int64;
 typedef unsigned int         uint32;
@@ -74,30 +67,26 @@
 DLAPI size_t      Dowa_Arena_Get_Used(Dowa_Arena *p_arena);
 DLAPI size_t      Dowa_Arena_Get_Remaining(Dowa_Arena *p_arena);
 
-// --- New stb_ds-style Data Structures --- //
+// --- Array and HashMap --- //
 
-// Allocator type enum
 typedef enum {
   DOWA_ALLOCATOR_MALLOC = 0,
   DOWA_ALLOCATOR_ARENA = 1
 } Dowa_Allocator_Type;
 
-// Array header (prefix to actual array data)
 typedef struct {
   size_t length;
   size_t capacity;
   uint8  allocator_type;
-  Dowa_Arena* p_arena;
-  void* p_hash;
+  Dowa_Arena *p_arena;
+  void *p_hash;
 } Dowa_Array_Header;
 
-// Hash bucket (64 bytes for cache line alignment)
 typedef struct {
   uint32 hash[DOWA_HASH_BUCKET_SIZE];
   uint32 index[DOWA_HASH_BUCKET_SIZE];
 } Dowa_Hash_Bucket;
 
-// Hash index structure (separate from value array)
 typedef struct {
   size_t bucket_count;
   size_t item_count;
@@ -107,10 +96,8 @@
   Dowa_Hash_Bucket* p_buckets;
 } Dowa_Hash_Index;
 
-// Key-Value pair declaration macro
 #define Dowa_KV(K, V) struct { K key; V value; }
 
-// Internal header accessor
 #define dowa__header(a) ((Dowa_Array_Header*)(a) - 1)
 
 // --- Array Macros --- //
@@ -149,7 +136,7 @@
 #define Dowa_HashMap_Push(m, k, v) \
   do { \
     (m) = dowa__hashmap_push((m), sizeof(*(m)), (k), strlen(k) + 1, NULL); \
-    void* p_kv_temp = dowa__hashmap_get_ptr((m), sizeof(*(m)), (k), strlen(k) + 1); \
+    void *p_kv_temp = dowa__hashmap_get_ptr((m), sizeof(*(m)), (k), strlen(k) + 1); \
     if (p_kv_temp) \
       ((typeof(m))p_kv_temp)->value = (v); \
   } while (0)
@@ -157,7 +144,7 @@
 #define Dowa_HashMap_Push_Arena(m, k, v, arena) \
   do { \
     (m) = dowa__hashmap_push((m), sizeof(*(m)), (k), strlen(k) + 1, (arena)); \
-    void* p_kv_temp = dowa__hashmap_get_ptr((m), sizeof(*(m)), (k), strlen(k) + 1); \
+    void *p_kv_temp = dowa__hashmap_get_ptr((m), sizeof(*(m)), (k), strlen(k) + 1); \
     if (p_kv_temp) \
       ((typeof(m))p_kv_temp)->value = (v); \
   } while (0)
@@ -183,7 +170,7 @@
 #define Dowa_HashMap_Push_Binary(m, k, ksize, v) \
   do { \
     (m) = dowa__hashmap_push((m), sizeof(*(m)), (k), (ksize), NULL); \
-    void* p_kv_temp = dowa__hashmap_get_ptr((m), sizeof(*(m)), (k), (ksize)); \
+    void *p_kv_temp = dowa__hashmap_get_ptr((m), sizeof(*(m)), (k), (ksize)); \
     if (p_kv_temp) \
       ((typeof(m))p_kv_temp)->value = (v); \
   } while (0)
@@ -191,37 +178,40 @@
 #define Dowa_HashMap_Push_Binary_Arena(m, k, ksize, v, arena) \
   do { \
     (m) = dowa__hashmap_push((m), sizeof(*(m)), (k), (ksize), (arena)); \
-    void* p_kv_temp = dowa__hashmap_get_ptr((m), sizeof(*(m)), (k), (ksize)); \
+    void *p_kv_temp = dowa__hashmap_get_ptr((m), sizeof(*(m)), (k), (ksize)); \
     if (p_kv_temp) \
       ((typeof(m))p_kv_temp)->value = (v); \
   } while (0)
 
 // --- Array Core Functions --- //
 
-DLAPI void* dowa__array_grow(void* p_array, size_t element_size, size_t minimum_capacity, Dowa_Arena* p_arena);
-DLAPI void  dowa__array_free(void* p_array);
+DLAPI void *dowa__array_grow(void *p_array, size_t element_size, size_t minimum_capacity, Dowa_Arena* p_arena);
+DLAPI void  dowa__array_free(void *p_array);
 
 // --- HashMap Core Functions --- //
 
-DLAPI uint32  dowa__hash_bytes(void* p_key, size_t key_size);
-DLAPI void*   dowa__hashmap_get(void* p_map, size_t element_size, void* p_key, size_t key_size);
-DLAPI void*   dowa__hashmap_get_ptr(void* p_map, size_t element_size, void* p_key, size_t key_size);
-DLAPI void*   dowa__hashmap_push(void* p_map, size_t element_size, void* p_key, size_t key_size, Dowa_Arena* p_arena);
-DLAPI boolean dowa__hashmap_has_key(void* p_map, size_t element_size, void* p_key, size_t key_size);
-DLAPI void    dowa__hashmap_delete(void* p_map, size_t element_size, void* p_key, size_t key_size);
-DLAPI void    dowa__hashmap_clear(void* p_map, size_t element_size);
-DLAPI void    dowa__hashmap_free(void* p_map);
-DLAPI size_t  dowa__hashmap_count(void* p_map);
+DLAPI uint32  dowa__hash_bytes(void *p_key, size_t key_size);
+DLAPI void   *dowa__hashmap_get(void *p_map, size_t element_size, void *p_key, size_t key_size);
+DLAPI void   *dowa__hashmap_get_ptr(void *p_map, size_t element_size, void *p_key, size_t key_size);
+DLAPI void   *dowa__hashmap_push(void *p_map, size_t element_size, void *p_key, size_t key_size, Dowa_Arena* p_arena);
+DLAPI boolean dowa__hashmap_has_key(void *p_map, size_t element_size, void *p_key, size_t key_size);
+DLAPI void    dowa__hashmap_delete(void *p_map, size_t element_size, void *p_key, size_t key_size);
+DLAPI void    dowa__hashmap_clear(void *p_map, size_t element_size);
+DLAPI void    dowa__hashmap_free(void *p_map);
+DLAPI size_t  dowa__hashmap_count(void *p_map);
 
 // --- String Manipulation --- //
 
-DLAPI  char      *Dowa_String_Slice(char *from, size_t start, size_t end, Dowa_Arena *p_arena);
-DLAPI  char     **Dowa_String_Split(char *from, char *token, int32 from_length, int32 token_length, Dowa_Arena *p_arena);
-DLAPI  char      *Dowa_String_Copy_Arena(char *from, Dowa_Arena *p_arena);
+DLAPI char      *Dowa_String_Slice(char *from, size_t start, size_t end, Dowa_Arena *p_arena);
+DLAPI char     **Dowa_String_Split(char *from, char *token, int32 from_length, int32 token_length, Dowa_Arena *p_arena);
+DLAPI char      *Dowa_String_Copy_Arena(char *from, Dowa_Arena *p_arena);
 DLAPI int32       Dowa_String_Pos_Find(const char *p_from, const char *p_value, const size_t from_length, const size_t value_length);
 DLAPI char       *Dowa_String_Find(const char *p_from, const char *p_value, const size_t from_length, const size_t value_length);
 DLAPI int32       Dowa_String_Pos_Find_Char(const char *p_from, int c, int32 from_length);
 DLAPI char       *Dowa_String_Find_Char(const char *p_from, int c, int32 from_length);
+DLAPI char       *Dowa_String_UUID(uint32 seed, void *buffer);
 
+// --- Math --- //
+DLAPI uint32      Dowa_Math_Random_Uint32(uint32 seed_number);
 
 #endif