From 92307201b51c399e8109c91cc131ff3602389db1 Mon Sep 17 00:00:00 2001 From: Thiago de Arruda Date: Fri, 23 May 2014 15:49:38 -0300 Subject: API: Refactor: Generalize buffer, window and tabpage types/functions - Extract remote types definitions into a macro - Extract msgpack_rpc helper functions for remote types into a macro --- src/nvim/api/private/defs.h | 14 +++++++++++--- src/nvim/os/msgpack_rpc.c | 44 ++++++++++++++------------------------------ 2 files changed, 25 insertions(+), 33 deletions(-) (limited to 'src') diff --git a/src/nvim/api/private/defs.h b/src/nvim/api/private/defs.h index 3ee50310fb..9b0639067d 100644 --- a/src/nvim/api/private/defs.h +++ b/src/nvim/api/private/defs.h @@ -5,6 +5,14 @@ #include #include +#define REMOTE_TYPE(type) typedef Integer type + +#define TYPED_ARRAY_OF(type) \ + typedef struct { \ + type *items; \ + size_t size; \ + } type##Array + // Basic types typedef struct { char msg[256]; @@ -20,9 +28,9 @@ typedef struct { size_t size; } String; -typedef Integer Buffer; -typedef Integer Window; -typedef Integer Tabpage; +REMOTE_TYPE(Buffer); +REMOTE_TYPE(Window); +REMOTE_TYPE(Tabpage); typedef struct object Object; diff --git a/src/nvim/os/msgpack_rpc.c b/src/nvim/os/msgpack_rpc.c index 45832070b1..c1e749a000 100644 --- a/src/nvim/os/msgpack_rpc.c +++ b/src/nvim/os/msgpack_rpc.c @@ -4,6 +4,16 @@ #include "nvim/vim.h" #include "nvim/memory.h" +#define REMOTE_FUNCS_IMPL(t, lt) \ + bool msgpack_rpc_to_##lt(msgpack_object *obj, t *arg) \ + { \ + return msgpack_rpc_to_integer(obj, arg); \ + } \ + \ + void msgpack_rpc_from_##lt(t result, msgpack_packer *res) \ + { \ + msgpack_rpc_from_integer(result, res); \ + } void msgpack_rpc_call(msgpack_object *req, msgpack_packer *res) { // The initial response structure is the same no matter what happens, @@ -104,21 +114,6 @@ bool msgpack_rpc_to_string(msgpack_object *obj, String *arg) return obj->type == MSGPACK_OBJECT_RAW; } -bool msgpack_rpc_to_buffer(msgpack_object *obj, Buffer *arg) -{ - return msgpack_rpc_to_integer(obj, arg); -} - -bool msgpack_rpc_to_window(msgpack_object *obj, Window *arg) -{ - return msgpack_rpc_to_integer(obj, arg); -} - -bool msgpack_rpc_to_tabpage(msgpack_object *obj, Tabpage *arg) -{ - return msgpack_rpc_to_integer(obj, arg); -} - bool msgpack_rpc_to_object(msgpack_object *obj, Object *arg) { switch (obj->type) { @@ -251,21 +246,6 @@ void msgpack_rpc_from_string(String result, msgpack_packer *res) msgpack_pack_raw_body(res, result.data, result.size); } -void msgpack_rpc_from_buffer(Buffer result, msgpack_packer *res) -{ - msgpack_rpc_from_integer(result, res); -} - -void msgpack_rpc_from_window(Window result, msgpack_packer *res) -{ - msgpack_rpc_from_integer(result, res); -} - -void msgpack_rpc_from_tabpage(Tabpage result, msgpack_packer *res) -{ - msgpack_rpc_from_integer(result, res); -} - void msgpack_rpc_from_object(Object result, msgpack_packer *res) { switch (result.type) { @@ -390,3 +370,7 @@ void msgpack_rpc_free_dictionary(Dictionary value) free(value.items); } +REMOTE_FUNCS_IMPL(Buffer, buffer) +REMOTE_FUNCS_IMPL(Window, window) +REMOTE_FUNCS_IMPL(Tabpage, tabpage) + -- cgit