diff options
| author | Albert Cervin <albert@acervin.com> | 2023-11-26 23:08:06 +0100 |
|---|---|---|
| committer | Albert Cervin <albert@acervin.com> | 2024-01-15 10:39:56 +0100 |
| commit | 64d6816a36567274551dd4f067fe4d05b1445cc0 (patch) | |
| tree | 50f8dc895d363ab391d30226f665870d8ce263b5 /src/dged/vec.h | |
| parent | c87888f10dfb54590c5aae8311b7aff887193d9a (diff) | |
| download | dged-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.h | 17 |
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); \ |
