static void __hashmap_ensure_free_entry(zbx_hashmap_t *hm, ZBX_HASHMAP_SLOT_T *slot);
#define CRIT_LOAD_FACTOR 5/1
#define SLOT_GROWTH_FACTOR 3/2
#define ARRAY_GROWTH_FACTOR 2
#define ZBX_HASHMAP_DEFAULT_SLOTS 10
static void __hashmap_ensure_free_entry(zbx_hashmap_t *hm, ZBX_HASHMAP_SLOT_T *slot)
if (NULL == slot->entries)
slot->entries = (ZBX_HASHMAP_ENTRY_T *)hm->mem_malloc_func(NULL, slot->entries_alloc *
sizeof(ZBX_HASHMAP_ENTRY_T));
else if (slot->entries_num == slot->entries_alloc)
slot->entries_alloc = slot->entries_alloc * ARRAY_GROWTH_FACTOR;
slot->entries = (ZBX_HASHMAP_ENTRY_T *)hm->mem_realloc_func(slot->entries, slot->entries_alloc *
sizeof(ZBX_HASHMAP_ENTRY_T));
static void zbx_hashmap_init_slots(zbx_hashmap_t *hm, size_t init_size)
hm->num_slots = next_prime(init_size);
hm->slots = (ZBX_HASHMAP_SLOT_T *)hm->mem_malloc_func(NULL, hm->num_slots * sizeof(ZBX_HASHMAP_SLOT_T));
memset(hm->slots, 0, hm->num_slots * sizeof(ZBX_HASHMAP_SLOT_T));
void zbx_hashmap_create(zbx_hashmap_t *hm, size_t init_size)
zbx_hashmap_create_ext(hm, init_size,
ZBX_DEFAULT_UINT64_HASH_FUNC,
ZBX_DEFAULT_UINT64_COMPARE_FUNC,
ZBX_DEFAULT_MEM_MALLOC_FUNC,
ZBX_DEFAULT_MEM_REALLOC_FUNC,
ZBX_DEFAULT_MEM_FREE_FUNC);
void zbx_hashmap_create_ext(zbx_hashmap_t *hm, size_t init_size,
zbx_hash_func_t hash_func,
zbx_compare_func_t compare_func,
zbx_mem_malloc_func_t mem_malloc_func,
zbx_mem_realloc_func_t mem_realloc_func,
zbx_mem_free_func_t mem_free_func)
hm->hash_func = hash_func;
hm->compare_func = compare_func;
hm->mem_malloc_func = mem_malloc_func;