Mercurial
view dowa/dowa.h @ 36:84672efec192
[Zenbu] WIP fixing issues regarding to using edge only. I think there is a problem where socket closes before sending back the info.
| author | MrJuneJune <me@mrjunejune.com> |
|---|---|
| date | Sun, 09 Nov 2025 06:25:16 -0800 |
| parents | 947b81010aba |
| children | 636eab07809d |
line wrap: on
line source
#ifndef DOWA #define DOWA #include <stdio.h> #include <string.h> // stdup #include <stdlib.h> // only for malloc, free, stuff #include <assert.h> // mostly for TODO #include <dirent.h> // some functions loop through files #include <sys/stat.h> #include <limits.h> #include "dowa_internal.h" #define HASH_KEY_NUMBER 5381 // DJD hash number #define ONE_MEGA_BYTE 1048576 #define TRUE 1 #define FALSE 0 #define Dowa_Free(p) do { \ if (p) { \ free(p); \ (p) = NULL; \ } \ } while (0) // Fixed-width integer types typedef unsigned int uint32; // 32-bit unsigned integer typedef int int32; // 32-bit signed integer typedef unsigned short uint16; // 16-bit unsigned integer typedef short int16; // 16-bit signed integer typedef unsigned char uint8; // 8-bit unsigned integer typedef char int8; // 8-bit signed integer typedef char boolean; // Boolean type (0 = false, nonzero = true) // --- Miscellaneous --- // /* Just use atoid lmao*/ char *Dowa_Int32ToString(uint32 value, char *buffer); // --- Arena Allocator --- // typedef struct { char *buffer; size_t offset; size_t capacity; } Dowa_Arena, *Dowa_PArena; /* Creates a new arena with the specified capacity (in bytes). Returns a pointer to the arena, or NULL on failure. */ extern Dowa_PArena Dowa_Arena_Create(size_t capacity); /* Allocates a block of memory of the given size from the arena. Returns pointer to the allocated memory, or NULL if there is insufficient space. */ extern void *Dowa_Arena_Allocate(Dowa_PArena arena, size_t size); /* Destroys the arena and frees its underlying memory block.*/ extern void Dowa_Arena_Destroy(Dowa_PArena arena); /* Strdup but saves within the arena */ extern void *Dowa_Arena_Copy(Dowa_PArena p_arena, const void *src, size_t size); // --- HashMap --- // typedef enum { DOWA_HASH_MAP_TYPE_BUFFER, // Raw byte buffer DOWA_HASH_MAP_TYPE_STRING, // Null-terminated string DOWA_HASH_MAP_TYPE_HASHMAP, // Nested hashmap DOWA_HASH_MAP_TYPE_INT // Integer value } Dowa_HashMap_ValueType; typedef struct { char *key; void *buffer; size_t capacity; Dowa_HashMap_ValueType type; struct Dowa_HashEntry *next; } Dowa_HashEntry, *Dowa_PHashEntry; typedef struct { Dowa_PHashEntry *entries; size_t capacity; uint32 current_capacity; Dowa_PArena p_arena; } Dowa_HashMap, *Dowa_PHashMap; /* Creates a new hashmap with the given initial capacity. Returns pointer to the hashmap, or NULL on failure. */ extern Dowa_PHashMap Dowa_HashMap_Create(size_t capacity); /* Creates a new hashmap with the given initial capacity, using the provided arena for all internal allocations. Returns pointer to the hashmap, or NULL on failure. */ extern Dowa_PHashMap Dowa_HashMap_Create_With_Arena(size_t capacity, Dowa_PArena arena); /* Destroys the hashmap and frees all associated memory */ extern void Dowa_HashMap_Destroy(Dowa_PHashMap p_hash_map); /* Returns the index of the entry for the specified key, or -1 if the key is not found. */ extern int32 Dowa_HashMap_Get_Position(Dowa_PHashMap p_hash_map, const char *key); /* Retrieves the value buffer for the specified key, or NULL if the key does not exist. */ extern void *Dowa_HashMap_Get(Dowa_PHashMap p_hash_map, const char *key); /* Inserts a copy of the given value into the hashmap under the specified key. Uses DOWA_HASH_MAP_TYPE_BUFFER as the entry type. */ extern void Dowa_HashMap_Push_Value(Dowa_PHashMap p_hash_map, const char *key, void *value, size_t value_size); /* Inserts a copy of the given value with the specified type into the hashmap under the key. Returns the index of the new entry, or -1 on failure. */ extern int32 Dowa_HashMap_Push_Value_With_Type(Dowa_PHashMap p_hash_map, const char *key, void *value, size_t value_size, Dowa_HashMap_ValueType type); /* Inserts a value pointer into the hashmap under the specified key without copying data. The caller retains ownership of the pointer. Returns the entry index, or -1 on failure. */ extern int32 Dowa_HashMap_Push_Value_With_Type_NoCopy(Dowa_PHashMap p_hash_map, const char *key, void *value, size_t value_size, Dowa_HashMap_ValueType type); /* Removes the entry with the specified key from the hashmap and frees its data if owned. */ extern void Dowa_HashMap_Pop_Key(Dowa_PHashMap p_hash_map, const char *key); // --- Utility Functions --- // /* Prints all entries in the hashmap to stdout for debugging purposes. */ extern void Dowa_HashMap_Print(Dowa_PHashMap map); /* Loads all files from the specified folder into the hashmap. Uses file names as keys and file contents as values. Returns 0 on success, or -1 on failure. */ extern int Dowa_HashMap_Cache_Folder(Dowa_PHashMap map, const char *folder_path); #endif