aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/yankmap.c
diff options
context:
space:
mode:
authorJosh Rahm <joshuarahm@gmail.com>2024-03-09 15:03:54 -0700
committerJosh Rahm <joshuarahm@gmail.com>2024-03-09 15:03:54 -0700
commitdf8f1db2a0c771364865be79bf12656a40b7028b (patch)
treeb6f6b9ec8dd46deed2a956249b0e82903c628492 /src/nvim/yankmap.c
parent7a7f497b483cd65e340064f23ed1c73425ecba0a (diff)
parentc324271b99eee4c621463f368914d57cd729bd9c (diff)
downloadrneovim-df8f1db2a0c771364865be79bf12656a40b7028b.tar.gz
rneovim-df8f1db2a0c771364865be79bf12656a40b7028b.tar.bz2
rneovim-df8f1db2a0c771364865be79bf12656a40b7028b.zip
Merge branch 'userreg' into mix_20240309
Diffstat (limited to 'src/nvim/yankmap.c')
-rw-r--r--src/nvim/yankmap.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/nvim/yankmap.c b/src/nvim/yankmap.c
new file mode 100644
index 0000000000..591bcffe33
--- /dev/null
+++ b/src/nvim/yankmap.c
@@ -0,0 +1,45 @@
+#include "nvim/yankmap.h"
+
+#include "nvim/memory.h"
+
+void init_yankmap(yankmap_T* map)
+{
+ memset(map, 0, sizeof(yankmap_T));
+
+ map->reg_to_yankreg = (Map(int, ptr_t))MAP_INIT;
+ map->yankreg_to_reg = (Map(ptr_t, int))MAP_INIT;
+ // map_init(int, ptr_t, &map->reg_to_yankreg);
+ // map_init(ptr_t, int, &map->yankreg_to_reg);
+}
+
+yankreg_T* yankmap_get(yankmap_T* yankmap, int reg)
+{
+ bool is_new = false;
+ yankreg_T** ret
+ = (yankreg_T**)map_put_ref(int, ptr_t)(&yankmap->reg_to_yankreg, reg, NULL, &is_new);
+
+ if (ret) {
+ if (is_new) {
+ *ret = xcalloc(sizeof(yankreg_T), 1);
+ }
+
+ /* Add the back-reference */
+ int* ref = map_put_ref(ptr_t, int)(&yankmap->yankreg_to_reg, *ret, NULL, NULL);
+ *ref = reg;
+
+ return *ret;
+ }
+
+ return NULL;
+}
+
+int yankmap_find(yankmap_T* yankmap, yankreg_T* yankreg)
+{
+ int* ref = map_ref(ptr_t, int)(&yankmap->yankreg_to_reg, yankreg, NULL);
+
+ if (ref) {
+ return *ref;
+ }
+
+ return -1;
+}