aboutsummaryrefslogtreecommitdiff
path: root/src/klib
diff options
context:
space:
mode:
authorbfredl <bjorn.linse@gmail.com>2023-09-12 11:16:35 +0200
committerGitHub <noreply@github.com>2023-09-12 11:16:35 +0200
commit1c4a93b591828bc6970edad6282c004eb46f0b2d (patch)
tree2f2a403f8b0132976dfe0a61eb78f65028329cdd /src/klib
parent6b5f44817e93c2985f3ea32122f1dc0047054018 (diff)
parentb04286a187d57c50f01cd36cd4668b7a69026579 (diff)
downloadrneovim-1c4a93b591828bc6970edad6282c004eb46f0b2d.tar.gz
rneovim-1c4a93b591828bc6970edad6282c004eb46f0b2d.tar.bz2
rneovim-1c4a93b591828bc6970edad6282c004eb46f0b2d.zip
Merge pull request #13243 from bfredl/intersection
feat(extmark): support highlighting and querying multiline ranges
Diffstat (limited to 'src/klib')
-rw-r--r--src/klib/kvec.h23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/klib/kvec.h b/src/klib/kvec.h
index f6674a0adf..fd9096e1ad 100644
--- a/src/klib/kvec.h
+++ b/src/klib/kvec.h
@@ -207,6 +207,16 @@ static inline void *_memcpy_free(void *const restrict dest, void *const restrict
/* 2^x initial array size. */ \
kvi_resize(v, (v).capacity << 1)
+/// fit at least "len" more items
+#define kvi_ensure_more_space(v, len) \
+ do { \
+ if ((v).capacity < (v).size + len) { \
+ (v).capacity = (v).size + len; \
+ kv_roundup32((v).capacity); \
+ kvi_resize((v), (v).capacity); \
+ } \
+ } while (0)
+
/// Get location where to store new element to a vector with preallocated array
///
/// @param[in,out] v Vector to push to.
@@ -223,6 +233,19 @@ static inline void *_memcpy_free(void *const restrict dest, void *const restrict
#define kvi_push(v, x) \
(*kvi_pushp(v) = (x))
+/// Copy a vector to a preallocated vector
+///
+/// @param[out] v1 destination
+/// @param[in] v0 source (can be either vector or preallocated vector)
+#define kvi_copy(v1, v0) \
+ do { \
+ if ((v1).capacity < (v0).size) { \
+ kvi_resize(v1, (v0).size); \
+ } \
+ (v1).size = (v0).size; \
+ memcpy((v1).items, (v0).items, sizeof((v1).items[0]) * (v0).size); \
+ } while (0)
+
/// Free array of elements of a vector with preallocated array if needed
///
/// @param[out] v Vector to free.