From 566f8f80d6cb7ef2df8366e5f092b0841ee757ce Mon Sep 17 00:00:00 2001 From: Famiu Haque Date: Thu, 12 May 2022 10:57:43 +0200 Subject: refactor(api/nvim_cmd): use `kvec_t` for constructing cmdline string MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Björn Linse --- src/nvim/lib/kvec.h | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) (limited to 'src/nvim/lib') diff --git a/src/nvim/lib/kvec.h b/src/nvim/lib/kvec.h index 34332ba34b..68841e0af8 100644 --- a/src/nvim/lib/kvec.h +++ b/src/nvim/lib/kvec.h @@ -94,17 +94,26 @@ memcpy((v1).items, (v0).items, sizeof((v1).items[0]) * (v0).size); \ } while (0) -#define kv_splice(v1, v0) \ +/// fit at least "len" more items +#define kv_ensure_space(v, len) \ do { \ - if ((v1).capacity < (v1).size + (v0).size) { \ - (v1).capacity = (v1).size + (v0).size; \ - kv_roundup32((v1).capacity); \ - kv_resize((v1), (v1).capacity); \ + if ((v).capacity < (v).size + len) { \ + (v).capacity = (v).size + len; \ + kv_roundup32((v).capacity); \ + kv_resize((v), (v).capacity); \ } \ - memcpy((v1).items + (v1).size, (v0).items, sizeof((v1).items[0]) * (v0).size); \ - (v1).size = (v1).size + (v0).size; \ } while (0) +#define kv_concat_len(v, data, len) \ + do { \ + kv_ensure_space(v, len); \ + memcpy((v).items + (v).size, data, sizeof((v).items[0]) * len); \ + (v).size = (v).size + len; \ + } while (0) + +#define kv_concat(v, str) kv_concat_len(v, str, STRLEN(str)) +#define kv_splice(v1, v0) kv_concat_len(v1, (v0).items, (v0).size) + #define kv_pushp(v) \ ((((v).size == (v).capacity) ? (kv_resize_full(v), 0) : 0), \ ((v).items + ((v).size++))) @@ -123,6 +132,8 @@ : 0UL)), \ &(v).items[(i)])) +#define kv_printf(v, ...) kv_do_printf(&(v), __VA_ARGS__) + /// Type of a vector with a few first members allocated on stack /// /// Is compatible with #kv_A, #kv_pop, #kv_size, #kv_max, #kv_last. -- cgit