summaryrefslogtreecommitdiff
path: root/src/dged/vec.h
diff options
context:
space:
mode:
authorAlbert Cervin <albert@acervin.com>2023-11-26 23:08:06 +0100
committerAlbert Cervin <albert@acervin.com>2024-01-15 10:39:56 +0100
commit64d6816a36567274551dd4f067fe4d05b1445cc0 (patch)
tree50f8dc895d363ab391d30226f665870d8ce263b5 /src/dged/vec.h
parentc87888f10dfb54590c5aae8311b7aff887193d9a (diff)
downloaddged-64d6816a36567274551dd4f067fe4d05b1445cc0.tar.gz
dged-64d6816a36567274551dd4f067fe4d05b1445cc0.tar.xz
dged-64d6816a36567274551dd4f067fe4d05b1445cc0.zip
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
Diffstat (limited to 'src/dged/vec.h')
-rw-r--r--src/dged/vec.h17
1 files changed, 17 insertions, 0 deletions
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); \