Add a lookup-and-return-default-value method
This commit is contained in:
parent
d1ef28b489
commit
2ee28fcd97
2 changed files with 17 additions and 0 deletions
|
@ -12,6 +12,7 @@ struct hashmap {
|
||||||
struct hashmap new_map();
|
struct hashmap new_map();
|
||||||
void insert_map(struct hashmap *map, const char *key, const void *value);
|
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(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);
|
int exists_map(struct hashmap *map, const char *key);
|
||||||
const void *remove_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));
|
void foreach_map(struct hashmap *map, void (*cb)(const char *key, const void *value));
|
||||||
|
|
|
@ -60,6 +60,22 @@ const void *lookup_map(struct hashmap *map, const char *key) {
|
||||||
return NULL;
|
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) {
|
int exists_map(struct hashmap *map, const char *key) {
|
||||||
return lookup_map(map, key) != NULL;
|
return lookup_map(map, key) != NULL;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue