diff options
Diffstat (limited to 'src/nvim/map.c')
-rw-r--r-- | src/nvim/map.c | 47 |
1 files changed, 26 insertions, 21 deletions
diff --git a/src/nvim/map.c b/src/nvim/map.c index 86dc257e40..d956699b21 100644 --- a/src/nvim/map.c +++ b/src/nvim/map.c @@ -56,54 +56,59 @@ \ Map(T, U) *map_##T##_##U##_new() \ { \ - Map(T, U) *rv = xmalloc(sizeof(Map(T, U))); \ - rv->table = kh_init(T##_##U##_map); \ + Map(T, U) *rv = xcalloc(1, sizeof(Map(T, U))); \ + /* khash_t table member is zero-initialized */ \ return rv; \ } \ \ void map_##T##_##U##_free(Map(T, U) *map) \ { \ - kh_destroy(T##_##U##_map, map->table); \ + kh_dealloc(T##_##U##_map, &map->table); \ xfree(map); \ } \ \ + void map_##T##_##U##_destroy(Map(T, U) *map) \ + { \ + kh_dealloc(T##_##U##_map, &map->table); \ + } \ + \ U map_##T##_##U##_get(Map(T, U) *map, T key) \ { \ khiter_t k; \ \ - if ((k = kh_get(T##_##U##_map, map->table, key)) == kh_end(map->table)) { \ + if ((k = kh_get(T##_##U##_map, &map->table, key)) == kh_end(&map->table)) { \ return INITIALIZER(T, U); \ } \ \ - return kh_val(map->table, k); \ + return kh_val(&map->table, k); \ } \ \ bool map_##T##_##U##_has(Map(T, U) *map, T key) \ { \ - return kh_get(T##_##U##_map, map->table, key) != kh_end(map->table); \ + return kh_get(T##_##U##_map, &map->table, key) != kh_end(&map->table); \ } \ \ T map_##T##_##U##_key(Map(T, U) *map, T key) \ { \ khiter_t k; \ \ - if ((k = kh_get(T##_##U##_map, map->table, key)) == kh_end(map->table)) { \ + if ((k = kh_get(T##_##U##_map, &map->table, key)) == kh_end(&map->table)) { \ abort(); /* Caller must check map_has(). */ \ } \ \ - return kh_key(map->table, k); \ + return kh_key(&map->table, k); \ } \ U map_##T##_##U##_put(Map(T, U) *map, T key, U value) \ { \ int ret; \ U rv = INITIALIZER(T, U); \ - khiter_t k = kh_put(T##_##U##_map, map->table, key, &ret); \ + khiter_t k = kh_put(T##_##U##_map, &map->table, key, &ret); \ \ if (!ret) { \ - rv = kh_val(map->table, k); \ + rv = kh_val(&map->table, k); \ } \ \ - kh_val(map->table, k) = value; \ + kh_val(&map->table, k) = value; \ return rv; \ } \ \ @@ -112,18 +117,18 @@ int ret; \ khiter_t k; \ if (put) { \ - k = kh_put(T##_##U##_map, map->table, key, &ret); \ + k = kh_put(T##_##U##_map, &map->table, key, &ret); \ if (ret) { \ - kh_val(map->table, k) = INITIALIZER(T, U); \ + kh_val(&map->table, k) = INITIALIZER(T, U); \ } \ } else { \ - k = kh_get(T##_##U##_map, map->table, key); \ - if (k == kh_end(map->table)) { \ + k = kh_get(T##_##U##_map, &map->table, key); \ + if (k == kh_end(&map->table)) { \ return NULL; \ } \ } \ \ - return &kh_val(map->table, k); \ + return &kh_val(&map->table, k); \ } \ \ U map_##T##_##U##_del(Map(T, U) *map, T key) \ @@ -131,9 +136,9 @@ U rv = INITIALIZER(T, U); \ khiter_t k; \ \ - if ((k = kh_get(T##_##U##_map, map->table, key)) != kh_end(map->table)) { \ - rv = kh_val(map->table, k); \ - kh_del(T##_##U##_map, map->table, k); \ + if ((k = kh_get(T##_##U##_map, &map->table, key)) != kh_end(&map->table)) { \ + rv = kh_val(&map->table, k); \ + kh_del(T##_##U##_map, &map->table, k); \ } \ \ return rv; \ @@ -141,7 +146,7 @@ \ void map_##T##_##U##_clear(Map(T, U) *map) \ { \ - kh_clear(T##_##U##_map, map->table); \ + kh_clear(T##_##U##_map, &map->table); \ } static inline khint_t String_hash(String s) @@ -199,7 +204,7 @@ MAP_IMPL(ptr_t, ptr_t, DEFAULT_INITIALIZER) MAP_IMPL(uint64_t, ptr_t, DEFAULT_INITIALIZER) MAP_IMPL(uint64_t, ssize_t, SSIZE_INITIALIZER) MAP_IMPL(uint64_t, uint64_t, DEFAULT_INITIALIZER) -#define EXTMARK_NS_INITIALIZER { 0, 0 } +#define EXTMARK_NS_INITIALIZER { { MAP_INIT }, 1 } MAP_IMPL(uint64_t, ExtmarkNs, EXTMARK_NS_INITIALIZER) #define EXTMARK_ITEM_INITIALIZER { 0, 0, NULL } MAP_IMPL(uint64_t, ExtmarkItem, EXTMARK_ITEM_INITIALIZER) |