strmap: take advantage of FLEXPTR_ALLOC_STR when relevant

By default, we do not use a mempool and strdup_strings is true; in this
case, we can avoid both an extra allocation and an extra free by just
over-allocating for the strmap_entry leaving enough space at the end to
copy the key.  FLEXPTR_ALLOC_STR exists for exactly this purpose, so
make use of it.

Also, adjust the case when we are using a memory pool and strdup_strings
is true to just do one allocation from the memory pool instead of two so
that the strmap_clear() and strmap_remove() code can just avoid freeing
the key in all cases.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Elijah Newren
2020-11-11 20:02:19 +00:00
committed by Junio C Hamano
parent a208ec1f0b
commit 23a276a9c4
2 changed files with 20 additions and 16 deletions

View File

@ -14,6 +14,7 @@ struct strmap_entry {
struct hashmap_entry ent;
const char *key;
void *value;
/* strmap_entry may be allocated extra space to store the key at end */
};
int cmp_strmap_entry(const void *hashmap_cmp_fn_data,