rcx

library of miscellaneous bits of C code
git clone git://git.rr3.xyz/rcx
Log | Files | Refs | README | LICENSE

commit 0f8cfe28ec4a8d57188798b296a0817ad22ae52f
parent a707b3a1778293e34c9dd879e30f6aa5b453882a
Author: robert <robertrussell.72001@gmail.com>
Date:   Wed, 10 Aug 2022 14:07:35 -0700

Fix vector and deque namespace issues

Diffstat:
Minc/cext/deque.h | 52++++++++++++++++++++++++++--------------------------
Minc/cext/vector.h | 74++++++++++++++++++++++++++++++++++++++------------------------------------
2 files changed, 64 insertions(+), 62 deletions(-)

diff --git a/inc/cext/deque.h b/inc/cext/deque.h @@ -7,7 +7,7 @@ /* Defaults */ #define DEQUE_STATIC -#define METHOD(name, prefix) JOIN(JOIN(prefix,_),name) +#define DEQUE_METHOD(name, prefix) JOIN(JOIN(prefix,_),name) #define DEQUE_MIN_BITS 3 /* 1<<3 = 8 elements */ #define DEQUE_REALLOCN ereallocn #define DEQUE_FREE free @@ -25,31 +25,31 @@ typedef struct D { \ * Full iff l == r */ #define DEQUE_DECLARE(D, T, ...)\ -DEQUE_STATIC UNUSED void METHOD(free,##__VA_ARGS__)(D *d); \ -DEQUE_STATIC UNUSED usize METHOD(len,##__VA_ARGS__)(D *d); \ -DEQUE_STATIC UNUSED usize METHOD(cap,##__VA_ARGS__)(D *d); \ -DEQUE_STATIC UNUSED int METHOD(reserve,##__VA_ARGS__)(D *d, usize n); \ -DEQUE_STATIC UNUSED int METHOD(pushl,##__VA_ARGS__)(D *d, T e); \ -DEQUE_STATIC UNUSED int METHOD(pushr,##__VA_ARGS__)(D *d, T e); \ -DEQUE_STATIC UNUSED T METHOD(popl,##__VA_ARGS__)(D *d); \ -DEQUE_STATIC UNUSED T METHOD(popr,##__VA_ARGS__)(D *d); \ -DEQUE_STATIC UNUSED T METHOD(peekl,##__VA_ARGS__)(D *d); \ -DEQUE_STATIC UNUSED T METHOD(peekr,##__VA_ARGS__)(D *d); \ -DEQUE_STATIC UNUSED T *METHOD(idx,##__VA_ARGS__)(D *d, usize i); +DEQUE_STATIC UNUSED void DEQUE_METHOD(free,##__VA_ARGS__)(D *d); \ +DEQUE_STATIC UNUSED usize DEQUE_METHOD(len,##__VA_ARGS__)(D *d); \ +DEQUE_STATIC UNUSED usize DEQUE_METHOD(cap,##__VA_ARGS__)(D *d); \ +DEQUE_STATIC UNUSED int DEQUE_METHOD(reserve,##__VA_ARGS__)(D *d, usize n); \ +DEQUE_STATIC UNUSED int DEQUE_METHOD(pushl,##__VA_ARGS__)(D *d, T e); \ +DEQUE_STATIC UNUSED int DEQUE_METHOD(pushr,##__VA_ARGS__)(D *d, T e); \ +DEQUE_STATIC UNUSED T DEQUE_METHOD(popl,##__VA_ARGS__)(D *d); \ +DEQUE_STATIC UNUSED T DEQUE_METHOD(popr,##__VA_ARGS__)(D *d); \ +DEQUE_STATIC UNUSED T DEQUE_METHOD(peekl,##__VA_ARGS__)(D *d); \ +DEQUE_STATIC UNUSED T DEQUE_METHOD(peekr,##__VA_ARGS__)(D *d); \ +DEQUE_STATIC UNUSED T *DEQUE_METHOD(idx,##__VA_ARGS__)(D *d, usize i); #define DEQUE_DEFINE(D, T, ...)\ -void METHOD(free,##__VA_ARGS__)(D *d) { \ +void DEQUE_METHOD(free,##__VA_ARGS__)(D *d) { \ DEQUE_FREE(d->arr); \ *d = (D){0}; \ } \ -usize METHOD(len,##__VA_ARGS__)(D *d) { \ +usize DEQUE_METHOD(len,##__VA_ARGS__)(D *d) { \ return d->l == d->r ? d->cap : (d->r - d->l) & (d->cap - 1); \ } \ -usize METHOD(cap,##__VA_ARGS__)(D *d) { \ +usize DEQUE_METHOD(cap,##__VA_ARGS__)(D *d) { \ return d->cap; \ } \ -int METHOD(reserve,##__VA_ARGS__)(D *d, usize n) { \ - usize rem = d->cap - METHOD(len,##__VA_ARGS__)(d); \ +int DEQUE_METHOD(reserve,##__VA_ARGS__)(D *d, usize n) { \ + usize rem = d->cap - DEQUE_METHOD(len,##__VA_ARGS__)(d); \ if (n <= rem) \ return 0; \ usize need = n - rem; \ @@ -79,15 +79,15 @@ int METHOD(reserve,##__VA_ARGS__)(D *d, usize n) { \ d->cap = ncap; \ return 0; \ } \ -int METHOD(pushl,##__VA_ARGS__)(D *d, T e) { \ - if (METHOD(reserve,##__VA_ARGS__)(d, 1) < 0) \ +int DEQUE_METHOD(pushl,##__VA_ARGS__)(D *d, T e) { \ + if (DEQUE_METHOD(reserve,##__VA_ARGS__)(d, 1) < 0) \ return -1; \ d->l = (d->l - 1) & (d->cap - 1); \ d->arr[d->l] = e; \ return 0; \ } \ -int METHOD(pushr,##__VA_ARGS__)(D *d, T e) { \ - if (METHOD(reserve,##__VA_ARGS__)(d, 1) < 0) \ +int DEQUE_METHOD(pushr,##__VA_ARGS__)(D *d, T e) { \ + if (DEQUE_METHOD(reserve,##__VA_ARGS__)(d, 1) < 0) \ return -1; \ d->arr[d->r] = e; \ d->r = (d->r + 1) & (d->cap - 1); \ @@ -95,7 +95,7 @@ int METHOD(pushr,##__VA_ARGS__)(D *d, T e) { \ d->l = 0; \ return 0; \ } \ -T METHOD(popl,##__VA_ARGS__)(D *d) { \ +T DEQUE_METHOD(popl,##__VA_ARGS__)(D *d) { \ T e = d->arr[d->l]; \ d->l = (d->l + 1) & (d->cap - 1); \ if (d->l == d->r) { \ @@ -104,7 +104,7 @@ T METHOD(popl,##__VA_ARGS__)(D *d) { \ } \ return e; \ } \ -T METHOD(popr,##__VA_ARGS__)(D *d) { \ +T DEQUE_METHOD(popr,##__VA_ARGS__)(D *d) { \ d->r = (d->r - 1) & (d->cap - 1); \ T e = d->arr[d->r]; \ if (d->l == d->r) { \ @@ -113,12 +113,12 @@ T METHOD(popr,##__VA_ARGS__)(D *d) { \ } \ return e; \ } \ -T METHOD(peekl,##__VA_ARGS__)(D *d) { \ +T DEQUE_METHOD(peekl,##__VA_ARGS__)(D *d) { \ return d->arr[d->l]; \ } \ -T METHOD(peekr,##__VA_ARGS__)(D *d) { \ +T DEQUE_METHOD(peekr,##__VA_ARGS__)(D *d) { \ return d->arr[(d->r - 1) & (d->cap - 1)]; \ } \ -T *METHOD(idx,##__VA_ARGS__)(D *d, usize i) { \ +T *DEQUE_METHOD(idx,##__VA_ARGS__)(D *d, usize i) { \ return &d->arr[(d->l + i) & (d->cap - 1)]; \ } diff --git a/inc/cext/vector.h b/inc/cext/vector.h @@ -8,51 +8,50 @@ #include "cext/internal/util.h" -/* TODO: this should be namespaced */ typedef struct { usize len; usize cap; maxalign arr[]; -} vechdr; +} cext_vechdr_; -#define VECHDR(v) ((vechdr *)(v) - 1) +#define CEXT_VECHDR_(v) ((cext_vechdr_ *)(v) - 1) /* Defaults */ #define VECTOR_STATIC -#define METHOD(name, prefix) JOIN(JOIN(prefix,_),name) +#define VECTOR_METHOD(name, prefix) JOIN(JOIN(prefix,_),name) #define VECTOR_MIN_CAP 8 #define VECTOR_REALLOC erealloc #define VECTOR_FREE free #define VECTOR_DECLARE(T, ...)\ -VECTOR_STATIC UNUSED void METHOD(free,##__VA_ARGS__)(T **v); \ -VECTOR_STATIC UNUSED usize METHOD(len,##__VA_ARGS__)(T **v); \ -VECTOR_STATIC UNUSED usize METHOD(cap,##__VA_ARGS__)(T **v); \ -VECTOR_STATIC UNUSED int METHOD(resize,##__VA_ARGS__)(T **v, usize cap); \ -VECTOR_STATIC UNUSED int METHOD(reserve,##__VA_ARGS__)(T **v, usize n); \ -VECTOR_STATIC UNUSED int METHOD(ins,##__VA_ARGS__)(T **v, usize i, T e); \ -VECTOR_STATIC UNUSED int METHOD(push,##__VA_ARGS__)(T **v, T e); \ -VECTOR_STATIC UNUSED T METHOD(del,##__VA_ARGS__)(T **v, usize i); \ -VECTOR_STATIC UNUSED T METHOD(pop,##__VA_ARGS__)(T **v); +VECTOR_STATIC UNUSED void VECTOR_METHOD(free,##__VA_ARGS__)(T **v); \ +VECTOR_STATIC UNUSED usize VECTOR_METHOD(len,##__VA_ARGS__)(T **v); \ +VECTOR_STATIC UNUSED usize VECTOR_METHOD(cap,##__VA_ARGS__)(T **v); \ +VECTOR_STATIC UNUSED int VECTOR_METHOD(resize,##__VA_ARGS__)(T **v, usize cap); \ +VECTOR_STATIC UNUSED int VECTOR_METHOD(reserve,##__VA_ARGS__)(T **v, usize n); \ +VECTOR_STATIC UNUSED int VECTOR_METHOD(ins,##__VA_ARGS__)(T **v, usize i, T e); \ +VECTOR_STATIC UNUSED int VECTOR_METHOD(push,##__VA_ARGS__)(T **v, T e); \ +VECTOR_STATIC UNUSED T VECTOR_METHOD(del,##__VA_ARGS__)(T **v, usize i); \ +VECTOR_STATIC UNUSED T VECTOR_METHOD(pop,##__VA_ARGS__)(T **v); #define VECTOR_DEFINE(T, ...)\ -void METHOD(free,##__VA_ARGS__)(T **v) { \ +void VECTOR_METHOD(free,##__VA_ARGS__)(T **v) { \ if (*v) \ - VECTOR_FREE(VECHDR(*v)); \ + VECTOR_FREE(CEXT_VECHDR_(*v)); \ *v = 0; \ } \ -usize METHOD(len,##__VA_ARGS__)(T **v) { \ - return *v ? VECHDR(*v)->len : 0; \ +usize VECTOR_METHOD(len,##__VA_ARGS__)(T **v) { \ + return *v ? CEXT_VECHDR_(*v)->len : 0; \ } \ -usize METHOD(cap,##__VA_ARGS__)(T **v) { \ - return *v ? VECHDR(*v)->cap : 0; \ +usize VECTOR_METHOD(cap,##__VA_ARGS__)(T **v) { \ + return *v ? CEXT_VECHDR_(*v)->cap : 0; \ } \ -int METHOD(resize,##__VA_ARGS__)(T **v, usize cap) { \ +int VECTOR_METHOD(resize,##__VA_ARGS__)(T **v, usize cap) { \ if (cap == 0) { \ - METHOD(free,##__VA_ARGS__)(v); \ + VECTOR_METHOD(free,##__VA_ARGS__)(v); \ } else { \ cap = MAX(cap, VECTOR_MIN_CAP); \ - vechdr *h = *v ? VECHDR(*v) : 0; \ + cext_vechdr_ *h = *v ? CEXT_VECHDR_(*v) : 0; \ usize len = h ? h->len : 0; \ usize arrsize = cap * sizeof (*v)[0]; \ if (cext_mul_will_overflow_(cap, sizeof (*v)[0]) \ @@ -68,8 +67,8 @@ int METHOD(resize,##__VA_ARGS__)(T **v, usize cap) { \ } \ return 0; \ } \ -int METHOD(reserve,##__VA_ARGS__)(T **v, usize n) { \ - vechdr *h = *v ? VECHDR(*v) : 0; \ +int VECTOR_METHOD(reserve,##__VA_ARGS__)(T **v, usize n) { \ + cext_vechdr_ *h = *v ? CEXT_VECHDR_(*v) : 0; \ usize rem = h ? h->cap - h->len : 0; \ if (n > rem) { \ usize need = n - rem; \ @@ -78,30 +77,33 @@ int METHOD(reserve,##__VA_ARGS__)(T **v, usize n) { \ errno = ENOMEM; \ return -1; \ } \ - return METHOD(resize,##__VA_ARGS__)(v, cap); \ + return VECTOR_METHOD(resize,##__VA_ARGS__)(v, cap); \ } else { \ return 0; \ } \ } \ -int METHOD(ins,##__VA_ARGS__)(T **v, usize i, T e) { \ - if (METHOD(reserve,##__VA_ARGS__)(v, 1)) \ +int VECTOR_METHOD(ins,##__VA_ARGS__)(T **v, usize i, T e) { \ + if (VECTOR_METHOD(reserve,##__VA_ARGS__)(v, 1)) \ return -1; \ - memmove(&(*v)[i+1], &(*v)[i], (VECHDR(*v)->len - i) * sizeof (*v)[0]); \ + memmove(&(*v)[i+1], &(*v)[i], \ + (CEXT_VECHDR_(*v)->len - i) * sizeof (*v)[0]); \ (*v)[i] = e; \ - VECHDR(*v)->len++; \ + CEXT_VECHDR_(*v)->len++; \ return 0; \ } \ -int METHOD(push,##__VA_ARGS__)(T **v, T e) { \ - return METHOD(ins,##__VA_ARGS__)(v, METHOD(len,##__VA_ARGS__)(v), e); \ +int VECTOR_METHOD(push,##__VA_ARGS__)(T **v, T e) { \ + return VECTOR_METHOD(ins,##__VA_ARGS__)(v, \ + VECTOR_METHOD(len,##__VA_ARGS__)(v), e); \ } \ -T METHOD(del,##__VA_ARGS__)(T **v, usize i) { \ +T VECTOR_METHOD(del,##__VA_ARGS__)(T **v, usize i) { \ T e = (*v)[i]; \ - memmove(&(*v)[i], &(*v)[i+1], (VECHDR(*v)->len - i - 1) * sizeof (*v)[0]); \ - VECHDR(*v)->len--; \ + memmove(&(*v)[i], &(*v)[i+1], \ + (CEXT_VECHDR_(*v)->len - i - 1) * sizeof (*v)[0]); \ + CEXT_VECHDR_(*v)->len--; \ return e; \ } \ -T METHOD(pop,##__VA_ARGS__)(T **v) { \ - return METHOD(del,##__VA_ARGS__)(v, VECHDR(*v)->len - 1); \ +T VECTOR_METHOD(pop,##__VA_ARGS__)(T **v) { \ + return VECTOR_METHOD(del,##__VA_ARGS__)(v, CEXT_VECHDR_(*v)->len - 1); \ } /* TODO?