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:
| M | inc/cext/deque.h | | | 52 | ++++++++++++++++++++++++++-------------------------- |
| M | inc/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?