summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorDaniel Silverstone <dsilvers@digital-scurf.org>2020-02-23 20:18:08 +0000
committerDaniel Silverstone <dsilvers@digital-scurf.org>2020-02-23 20:59:40 +0000
commit088917641f0865e11be5e81bf90de3dbc8cba19e (patch)
tree40209eeb6262b82b9bb252322345600f8cc50404 /utils
parent3e02961ec8f21fd656c8b306c5075c0c799df97f (diff)
downloadnetsurf-088917641f0865e11be5e81bf90de3dbc8cba19e.tar.gz
netsurf-088917641f0865e11be5e81bf90de3dbc8cba19e.tar.bz2
utils: Add hashmap_count()
Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
Diffstat (limited to 'utils')
-rw-r--r--utils/hashmap.c23
-rw-r--r--utils/hashmap.h8
2 files changed, 28 insertions, 3 deletions
diff --git a/utils/hashmap.c b/utils/hashmap.c
index b7870a3a7..814dc55b5 100644
--- a/utils/hashmap.c
+++ b/utils/hashmap.c
@@ -55,6 +55,11 @@ struct hashmap_s {
* The number of buckets in this map
*/
uint32_t bucket_count;
+
+ /**
+ * The number of entries in this map
+ */
+ size_t entry_count;
};
/* Exported function, documented in hashmap.h */
@@ -65,14 +70,16 @@ hashmap_create(hashmap_parameters_t *params)
ret->params = params;
ret->bucket_count = DEFAULT_HASHMAP_BUCKETS;
+ ret->entry_count = 0;
ret->buckets = malloc(ret->bucket_count * sizeof(hashmap_entry_t *));
- memset(ret->buckets, 0, ret->bucket_count * sizeof(hashmap_entry_t *));
if (ret->buckets == NULL) {
free(ret);
return NULL;
}
-
+
+ memset(ret->buckets, 0, ret->bucket_count * sizeof(hashmap_entry_t *));
+
return ret;
}
@@ -176,7 +183,9 @@ hashmap_insert(hashmap_t *hashmap, void *key)
}
hashmap->buckets[bucket] = entry;
-
+
+ hashmap->entry_count++;
+
return entry->value;
err:
@@ -207,6 +216,7 @@ hashmap_remove(hashmap_t *hashmap, void *key)
}
*entry->prevptr = entry->next;
free(entry);
+ hashmap->entry_count--;
return true;
}
}
@@ -233,3 +243,10 @@ hashmap_iterate(hashmap_t *hashmap, hashmap_iteration_cb_t cb, void *ctx)
return false;
}
+
+/* Exported function, documented in hashmap.h */
+size_t
+hashmap_count(hashmap_t *hashmap)
+{
+ return hashmap->entry_count;
+}
diff --git a/utils/hashmap.h b/utils/hashmap.h
index cb8fd5074..3968fd3fe 100644
--- a/utils/hashmap.h
+++ b/utils/hashmap.h
@@ -186,4 +186,12 @@ bool hashmap_remove(hashmap_t *hashmap, void *key);
*/
bool hashmap_iterate(hashmap_t *hashmap, hashmap_iteration_cb_t cb, void *ctx);
+/**
+ * Get the number of entries in this map
+ *
+ * \param hashmap The hashmap to retrieve the entry count from
+ * \return The number of entries in the hashmap
+ */
+size_t hashmap_count(hashmap_t *hashmap);
+
#endif