From 2371445c9029109935d2919a94ba2e73e1812ce5 Mon Sep 17 00:00:00 2001 From: attilavs2 Date: Mon, 10 Mar 2025 10:34:26 +0100 Subject: [PATCH] Hashmap_remove --- src/hash.c | 56 +++++++++--------------------------------------------- src/hash.h | 2 ++ 2 files changed, 11 insertions(+), 47 deletions(-) diff --git a/src/hash.c b/src/hash.c index d702054..13f3beb 100755 --- a/src/hash.c +++ b/src/hash.c @@ -1,50 +1,3 @@ -#include -#include -#include - -#include "types.h" -#include "hash.h" -#include "config.h" - -int heap_hashmap(HashMap *map, i32 size){ - if(size < 32) - return 1; - map->curr_len = size; - map->buffer = malloc(sizeof(MapItem)*size); - map->bit_free = malloc(sizeof(u32)*size/32); - - if(!map->buffer || !map->bit_free) - return 1; - - memset(map->bit_free, 0, sizeof(u32)*size/32); - memset(map->buffer, 0, sizeof(MapItem)*size); - - return 0; -} - -void free_hashmap(HashMap *map){ - free(map->buffer); - free(map->bit_free); -} - -// ~djb2 -i32 hash(i32 max, char *str){ - if(!str) - return HASH_NULL; - u32 hsh = 5281; - char ch = str[0]; - for(int i = 1; i < 32 && ch; i++){ - hsh = (hsh << 5) ^ ch; - ch = str[i]; - } - hsh %= max; - #if DEBUG == 2 - assert(hsh < HASH_NULL); - #endif - return hsh; -} - -i32 get_bit(u32 *bitmap, i32 pos){ return (bitmap[pos/32] >> (pos%32)) & 1; } @@ -122,3 +75,12 @@ MapItem *hashmap_get(HashMap *map, char *str){ else return NULL; } + +void hashmap_remove(HashMap *map, char *str){ + MapItem *ret = hashmap_get(map, str); + if(!ret) + return; + // Erase the existance of the entry + // (Literally 1984) + memset(ret, 0, sizeof(MapItem)); +} diff --git a/src/hash.h b/src/hash.h index fe11cba..3f9e959 100755 --- a/src/hash.h +++ b/src/hash.h @@ -44,3 +44,5 @@ MapItem *hashmap_insert(HashMap *map, char *str); // Returns NULL if error/not found MapItem *hashmap_get(HashMap *map, char *str); + +void hashmap_remove(HashMap *map, char *str);