mirror of
https://github.com/neovim/neovim.git
synced 2025-09-10 13:28:19 +00:00
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
This commit is contained in:
@@ -5,6 +5,14 @@
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#define REMOTE_TYPE(type) typedef Integer type
|
||||||
|
|
||||||
|
#define TYPED_ARRAY_OF(type) \
|
||||||
|
typedef struct { \
|
||||||
|
type *items; \
|
||||||
|
size_t size; \
|
||||||
|
} type##Array
|
||||||
|
|
||||||
// Basic types
|
// Basic types
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char msg[256];
|
char msg[256];
|
||||||
@@ -20,9 +28,9 @@ typedef struct {
|
|||||||
size_t size;
|
size_t size;
|
||||||
} String;
|
} String;
|
||||||
|
|
||||||
typedef Integer Buffer;
|
REMOTE_TYPE(Buffer);
|
||||||
typedef Integer Window;
|
REMOTE_TYPE(Window);
|
||||||
typedef Integer Tabpage;
|
REMOTE_TYPE(Tabpage);
|
||||||
|
|
||||||
typedef struct object Object;
|
typedef struct object Object;
|
||||||
|
|
||||||
|
@@ -4,6 +4,16 @@
|
|||||||
#include "nvim/vim.h"
|
#include "nvim/vim.h"
|
||||||
#include "nvim/memory.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)
|
void msgpack_rpc_call(msgpack_object *req, msgpack_packer *res)
|
||||||
{
|
{
|
||||||
// The initial response structure is the same no matter what happens,
|
// 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;
|
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)
|
bool msgpack_rpc_to_object(msgpack_object *obj, Object *arg)
|
||||||
{
|
{
|
||||||
switch (obj->type) {
|
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);
|
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)
|
void msgpack_rpc_from_object(Object result, msgpack_packer *res)
|
||||||
{
|
{
|
||||||
switch (result.type) {
|
switch (result.type) {
|
||||||
@@ -390,3 +370,7 @@ void msgpack_rpc_free_dictionary(Dictionary value)
|
|||||||
free(value.items);
|
free(value.items);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
REMOTE_FUNCS_IMPL(Buffer, buffer)
|
||||||
|
REMOTE_FUNCS_IMPL(Window, window)
|
||||||
|
REMOTE_FUNCS_IMPL(Tabpage, tabpage)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user