From 2ee28fcd974e25b0bc9ee9b1ea161165135a7a95 Mon Sep 17 00:00:00 2001 From: ntchambers Date: Tue, 19 Jun 2018 15:13:51 -0500 Subject: [PATCH] Add a lookup-and-return-default-value method --- include/hashmap.h | 1 + src/hashmap.c | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/include/hashmap.h b/include/hashmap.h index b8b0a20..9bca499 100644 --- a/include/hashmap.h +++ b/include/hashmap.h @@ -12,6 +12,7 @@ struct hashmap { struct hashmap new_map(); void insert_map(struct hashmap *map, const char *key, const void *value); const void *lookup_map(struct hashmap *map, const char *key); +const void *lookup_map_default(struct hashmap *map, const char *key, const void *default_value); int exists_map(struct hashmap *map, const char *key); const void *remove_map(struct hashmap *map, const char *key); void foreach_map(struct hashmap *map, void (*cb)(const char *key, const void *value)); diff --git a/src/hashmap.c b/src/hashmap.c index f7ce349..351675d 100644 --- a/src/hashmap.c +++ b/src/hashmap.c @@ -60,6 +60,22 @@ const void *lookup_map(struct hashmap *map, const char *key) { return NULL; } +const void *lookup_map_default(struct hashmap *map, const char *key, const void *default_value) { + if(key == NULL) { + return NULL; + } + + int index = hash_map(key); + + for(struct node *iter = map->buckets[index].head; iter != NULL; iter = iter->next) { + if(strcmp(iter->key, key) == 0) { + return iter->value; + } + } + + return default_value; +} + int exists_map(struct hashmap *map, const char *key) { return lookup_map(map, key) != NULL; }