diff options
author | bfredl <bjorn.linse@gmail.com> | 2023-09-12 11:16:35 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-12 11:16:35 +0200 |
commit | 1c4a93b591828bc6970edad6282c004eb46f0b2d (patch) | |
tree | 2f2a403f8b0132976dfe0a61eb78f65028329cdd /src/klib | |
parent | 6b5f44817e93c2985f3ea32122f1dc0047054018 (diff) | |
parent | b04286a187d57c50f01cd36cd4668b7a69026579 (diff) | |
download | rneovim-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.h | 23 |
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. |