strmap: enable allocations to come from a mem_pool
For heavy users of strmaps, allowing the keys and entries to be allocated from a memory pool can provide significant overhead savings. Add an option to strmap_init_with_options() to specify a memory pool. Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
1201eb628a
commit
a208ec1f0b
11
strmap.h
11
strmap.h
@ -3,8 +3,10 @@
|
||||
|
||||
#include "hashmap.h"
|
||||
|
||||
struct mem_pool;
|
||||
struct strmap {
|
||||
struct hashmap map;
|
||||
struct mem_pool *pool;
|
||||
unsigned int strdup_strings:1;
|
||||
};
|
||||
|
||||
@ -37,9 +39,10 @@ void strmap_init(struct strmap *map);
|
||||
|
||||
/*
|
||||
* Same as strmap_init, but for those who want to control the memory management
|
||||
* carefully instead of using the default of strdup_strings=1.
|
||||
* carefully instead of using the default of strdup_strings=1 and pool=NULL.
|
||||
*/
|
||||
void strmap_init_with_options(struct strmap *map,
|
||||
struct mem_pool *pool,
|
||||
int strdup_strings);
|
||||
|
||||
/*
|
||||
@ -137,9 +140,10 @@ static inline void strintmap_init(struct strintmap *map, int default_value)
|
||||
|
||||
static inline void strintmap_init_with_options(struct strintmap *map,
|
||||
int default_value,
|
||||
struct mem_pool *pool,
|
||||
int strdup_strings)
|
||||
{
|
||||
strmap_init_with_options(&map->map, strdup_strings);
|
||||
strmap_init_with_options(&map->map, pool, strdup_strings);
|
||||
map->default_value = default_value;
|
||||
}
|
||||
|
||||
@ -221,9 +225,10 @@ static inline void strset_init(struct strset *set)
|
||||
}
|
||||
|
||||
static inline void strset_init_with_options(struct strset *set,
|
||||
struct mem_pool *pool,
|
||||
int strdup_strings)
|
||||
{
|
||||
strmap_init_with_options(&set->map, strdup_strings);
|
||||
strmap_init_with_options(&set->map, pool, strdup_strings);
|
||||
}
|
||||
|
||||
static inline void strset_clear(struct strset *set)
|
||||
|
Reference in New Issue
Block a user