#include "strpool.h" void init_strpool(strpool_t* pool) { lalloc_init(&pool->stralloc); pool->ht.hash_func = (u32_t(*)(const void*))rt_strhash; pool->ht.key_cmp = (int(*)(const void*, const void*))rt_strcmp; hashtable_init(&pool->ht); } const char* strpool_intern(strpool_t* pool, const char* str) { void* existing = hashtable_get(&pool->ht, str); if (existing) { return existing; } rt_size_t len = rt_strlen(str) + 1; char* new_str = lalloc_alloc(&pool->stralloc, len); if (!new_str) { LOG_ERROR("strpool: Failed to allocate memory for string"); return NULL; } rt_memcpy(new_str, str, len); hashtable_set(&pool->ht, new_str, new_str); return new_str; } void strpool_destroy(strpool_t* pool) { hashtable_destory(&pool->ht); lalloc_destroy(&pool->stralloc); }