summaryrefslogtreecommitdiff
path: root/strmap.c
diff options
context:
space:
mode:
authorElijah Newren <newren@gmail.com>2020-11-05 00:22:41 (GMT)
committerJunio C Hamano <gitster@pobox.com>2020-11-05 01:09:49 (GMT)
commit4fa1d501f775253fe70bf6c6a00fe8156c8c61c7 (patch)
tree0d3522fe42bdaf78b60c32d22767a6d57fd38207 /strmap.c
parent6ccdfc2a206d8266ad7613999a0d3f6acdf44c89 (diff)
downloadgit-4fa1d501f775253fe70bf6c6a00fe8156c8c61c7.zip
git-4fa1d501f775253fe70bf6c6a00fe8156c8c61c7.tar.gz
git-4fa1d501f775253fe70bf6c6a00fe8156c8c61c7.tar.bz2
strmap: add functions facilitating use as a string->int map
Although strmap could be used as a string->int map, one either had to allocate an int for every entry and then deallocate later, or one had to do a bunch of casting between (void*) and (intptr_t). Add some special functions that do the casting. Also, rename put->set for such wrapper functions since 'put' implied there may be some deallocation needed if the string was already found in the map, which isn't the case when we're storing an int value directly in the void* slot instead of using the void* slot as a pointer to data. Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'strmap.c')
-rw-r--r--strmap.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/strmap.c b/strmap.c
index c410c52..0d10a88 100644
--- a/strmap.c
+++ b/strmap.c
@@ -123,3 +123,14 @@ void strmap_remove(struct strmap *map, const char *str, int free_value)
free((char*)ret->key);
free(ret);
}
+
+void strintmap_incr(struct strintmap *map, const char *str, intptr_t amt)
+{
+ struct strmap_entry *entry = find_strmap_entry(&map->map, str);
+ if (entry) {
+ intptr_t *whence = (intptr_t*)&entry->value;
+ *whence += amt;
+ }
+ else
+ strintmap_set(map, str, map->default_value + amt);
+}