aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/lib
diff options
context:
space:
mode:
authorbfredl <bjorn.linse@gmail.com>2022-05-14 11:20:13 +0200
committerGitHub <noreply@github.com>2022-05-14 11:20:13 +0200
commit99f3e74fc27acb0d9d9f32161e18b5a474697074 (patch)
treef6fe0df8bcacf42351caf5f57ed7c4e1e9ca9c4c /src/nvim/lib
parent9e4286294f9caa5a20851706331cc46a5342f326 (diff)
parent566f8f80d6cb7ef2df8366e5f092b0841ee757ce (diff)
downloadrneovim-99f3e74fc27acb0d9d9f32161e18b5a474697074.tar.gz
rneovim-99f3e74fc27acb0d9d9f32161e18b5a474697074.tar.bz2
rneovim-99f3e74fc27acb0d9d9f32161e18b5a474697074.zip
Merge pull request #18542 from famiu/feat/api/nvim_cmd/kvec_t
refactor(api/nvim_cmd): use `kvec_t` for constructing cmdline string
Diffstat (limited to 'src/nvim/lib')
-rw-r--r--src/nvim/lib/kvec.h25
1 files changed, 18 insertions, 7 deletions
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.