From 64d6816a36567274551dd4f067fe4d05b1445cc0 Mon Sep 17 00:00:00 2001 From: Albert Cervin Date: Sun, 26 Nov 2023 23:08:06 +0100 Subject: Completion rework - Add support for building with clang Also fix some annoying bugs: - Visual column was wrong when using tabs - Add shift-tab for inserting an actual tab - Fix minibuffer sometimes having dot above it --- src/dged/vec.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'src/dged/vec.h') diff --git a/src/dged/vec.h b/src/dged/vec.h index df5cd0e..8b17fa5 100644 --- a/src/dged/vec.h +++ b/src/dged/vec.h @@ -5,6 +5,7 @@ #define VEC(entry) \ struct { \ + entry *temp; \ entry *entries; \ uint32_t nentries; \ uint32_t capacity; \ @@ -12,10 +13,12 @@ #define VEC_INIT(vec, initial_capacity) \ (vec)->entries = malloc(sizeof((vec)->entries[0]) * initial_capacity); \ + (vec)->temp = calloc(1, sizeof((vec)->entries[0])); \ (vec)->capacity = initial_capacity; \ (vec)->nentries = 0; #define VEC_DESTROY(vec) \ + free((vec)->temp); \ free((vec)->entries); \ (vec)->entries = NULL; \ (vec)->capacity = 0; \ @@ -36,6 +39,20 @@ (vec)->entries[(vec)->nentries] = entry; \ ++(vec)->nentries; +#define VEC_POP(vec, var) \ + var = (vec)->entries[(vec)->nentries - 1]; \ + if ((vec)->nentries > 0) { \ + --(vec)->nentries; \ + } + +#define VEC_SWAP(vec, idx1, idx2) \ + if (idx1 < (vec)->nentries && idx2 < (vec)->nentries && idx1 >= 0 && \ + idx2 >= 0) { \ + *((vec)->temp) = (vec)->entries[idx1]; \ + (vec)->entries[idx1] = (vec)->entries[idx2]; \ + (vec)->entries[idx2] = *((vec)->temp); \ + } + #define VEC_APPEND(vec, var) \ if ((vec)->nentries + 1 >= (vec)->capacity) { \ VEC_GROW(vec, (vec)->capacity * 2); \ -- cgit v1.2.3