aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThiago de Arruda <tpadilha84@gmail.com>2014-09-03 11:46:35 -0300
committerThiago de Arruda <tpadilha84@gmail.com>2014-09-12 13:25:28 -0300
commitc39ae3e4d475c868f8ba76116735501ea97dfae1 (patch)
tree3950b82edf564f2938924a3e7db55201eb7c055f /src
parente2143674ae20fbadbea004bd54d6f5dc32b83803 (diff)
downloadrneovim-c39ae3e4d475c868f8ba76116735501ea97dfae1.tar.gz
rneovim-c39ae3e4d475c868f8ba76116735501ea97dfae1.tar.bz2
rneovim-c39ae3e4d475c868f8ba76116735501ea97dfae1.zip
map/msgpack-rpc: Declare/define maps rpc method handlers
The new map type uses `String` instances as keys to avoid unnecessary copying to zero-terminated buffers.
Diffstat (limited to 'src')
-rw-r--r--src/nvim/map.c18
-rw-r--r--src/nvim/map.h3
-rw-r--r--src/nvim/vim.h2
3 files changed, 23 insertions, 0 deletions
diff --git a/src/nvim/map.c b/src/nvim/map.c
index 2e47e8b249..24aa38d67d 100644
--- a/src/nvim/map.c
+++ b/src/nvim/map.c
@@ -1,10 +1,12 @@
#include <stdlib.h>
#include <stdbool.h>
+#include <string.h>
#include "nvim/map.h"
#include "nvim/map_defs.h"
#include "nvim/vim.h"
#include "nvim/memory.h"
+#include "nvim/os/msgpack_rpc.h"
#include "nvim/lib/khash.h"
@@ -87,7 +89,23 @@
return rv; \
}
+static inline khint_t String_hash(String s)
+{
+ khint_t h = 0;
+ for (size_t i = 0; i < s.size && s.data[i]; i++) {
+ h = (h << 5) - h + (uint8_t)s.data[i];
+ }
+ return h;
+}
+
+static inline bool String_eq(String a, String b)
+{
+ return strncmp(a.data, b.data, min(a.size, b.size)) == 0;
+}
+
+
MAP_IMPL(cstr_t, uint64_t, DEFAULT_INITIALIZER)
MAP_IMPL(cstr_t, ptr_t, DEFAULT_INITIALIZER)
MAP_IMPL(ptr_t, ptr_t, DEFAULT_INITIALIZER)
MAP_IMPL(uint64_t, ptr_t, DEFAULT_INITIALIZER)
+MAP_IMPL(String, rpc_method_handler_fn, DEFAULT_INITIALIZER)
diff --git a/src/nvim/map.h b/src/nvim/map.h
index 73698cba22..616516c3e1 100644
--- a/src/nvim/map.h
+++ b/src/nvim/map.h
@@ -4,6 +4,8 @@
#include <stdbool.h>
#include "nvim/map_defs.h"
+#include "nvim/api/private/defs.h"
+#include "nvim/os/msgpack_rpc.h"
#define MAP_DECLS(T, U) \
KHASH_DECLARE(T##_##U##_map, T, U) \
@@ -23,6 +25,7 @@ MAP_DECLS(cstr_t, uint64_t)
MAP_DECLS(cstr_t, ptr_t)
MAP_DECLS(ptr_t, ptr_t)
MAP_DECLS(uint64_t, ptr_t)
+MAP_DECLS(String, rpc_method_handler_fn)
#define map_new(T, U) map_##T##_##U##_new
#define map_free(T, U) map_##T##_##U##_free
diff --git a/src/nvim/vim.h b/src/nvim/vim.h
index 6479aeaafb..3ef291ef7c 100644
--- a/src/nvim/vim.h
+++ b/src/nvim/vim.h
@@ -8,6 +8,8 @@
#ifndef NVIM_VIM_H
# define NVIM_VIM_H
+#define min(X, Y) (X < Y ? X : Y)
+
#include "nvim/types.h"
#include "nvim/pos.h" // for linenr_T, MAXCOL, etc...