mirror of
https://github.com/neovim/neovim.git
synced 2025-09-27 21:48:35 +00:00
Introduce nvim namespace: Move files.
Move files from src/ to src/nvim/. - src/nvim/ becomes the new root dir for nvim executable sources. - src/libnvim/ is planned to become root dir of the neovim library.
This commit is contained in:
91
src/nvim/map.c
Normal file
91
src/nvim/map.c
Normal file
@@ -0,0 +1,91 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#include "map.h"
|
||||
#include "map_defs.h"
|
||||
#include "vim.h"
|
||||
#include "memory.h"
|
||||
|
||||
#include "lib/khash.h"
|
||||
|
||||
typedef struct {
|
||||
void *ptr;
|
||||
} Value;
|
||||
|
||||
KHASH_MAP_INIT_STR(Map, Value)
|
||||
|
||||
struct map {
|
||||
khash_t(Map) *table;
|
||||
};
|
||||
|
||||
Map *map_new()
|
||||
{
|
||||
Map *rv = xmalloc(sizeof(Map));
|
||||
rv->table = kh_init(Map);
|
||||
return rv;
|
||||
}
|
||||
|
||||
void map_free(Map *map)
|
||||
{
|
||||
kh_clear(Map, map->table);
|
||||
kh_destroy(Map, map->table);
|
||||
free(map);
|
||||
}
|
||||
|
||||
void *map_get(Map *map, const char *key)
|
||||
{
|
||||
khiter_t k;
|
||||
|
||||
if ((k = kh_get(Map, map->table, key)) == kh_end(map->table)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return kh_val(map->table, k).ptr;
|
||||
}
|
||||
|
||||
bool map_has(Map *map, const char *key)
|
||||
{
|
||||
return map_get(map, key) != NULL;
|
||||
}
|
||||
|
||||
void *map_put(Map *map, const char *key, void *value)
|
||||
{
|
||||
int ret;
|
||||
void *rv = NULL;
|
||||
khiter_t k = kh_put(Map, map->table, key, &ret);
|
||||
Value val = {.ptr = value};
|
||||
|
||||
if (!ret) {
|
||||
// key present, return the current value
|
||||
rv = kh_val(map->table, k).ptr;
|
||||
kh_del(Map, map->table, k);
|
||||
}
|
||||
|
||||
kh_val(map->table, k) = val;
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
void *map_del(Map *map, const char *key)
|
||||
{
|
||||
void *rv = NULL;
|
||||
khiter_t k;
|
||||
|
||||
if ((k = kh_get(Map, map->table, key)) != kh_end(map->table)) {
|
||||
rv = kh_val(map->table, k).ptr;
|
||||
kh_del(Map, map->table, k);
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
void map_foreach(Map *map, key_value_cb cb)
|
||||
{
|
||||
const char *key;
|
||||
Value value;
|
||||
|
||||
kh_foreach(map->table, key, value, {
|
||||
cb(map, (const char *)key, value.ptr);
|
||||
});
|
||||
}
|
||||
|
Reference in New Issue
Block a user