Mercurial
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