From ef415a4d9cfaa0da72e34338208494a82247ee0f Mon Sep 17 00:00:00 2001 From: WormHeamer Date: Wed, 26 Nov 2025 01:53:33 -0500 Subject: reorder XAR_* arguments to line up better with dynarr.h DA_A* --- xar.h | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/xar.h b/xar.h index e448889..a0d6664 100644 --- a/xar.h +++ b/xar.h @@ -5,7 +5,9 @@ /* see https://danielchasehooper.com/posts/segment_array/ */ #include + #include "arena.h" +#include "wrmr.h" #define XAR_INIT_SZ 8 #define XAR_MAX_DOUBLE 26 @@ -16,12 +18,19 @@ typedef struct { } XarHdr; #define XAR(T) struct { int n, chunks; T *chunk[XAR_MAX_DOUBLE]; } -#define XAR_GET_T(xar, T, idx) (T*)(xar_get((XarHdr*)(xar), idx, sizeof(T))) -#define XAR_PUT_T(xar, T, idx, a) (T*)(xar_put((XarHdr*)(xar), idx, sizeof(T), a)) -#define XAR_GET(xar, idx) XAR_GET_T(xar, typeof(**(xar)->chunk), idx) -#define XAR_PUT(xar, idx, a) XAR_PUT_T(xar, typeof(**(xar)->chunk), idx, a) -#define XAR_PUSH(xar, v, a) (*XAR_PUT(xar, (xar)->n++, a) = (v)) -#define XAR_PUSH_T(xar, T, v, a) (*XAR_PUT_T(xar, T, (xar)->n++, a) = (v)) +#define XAR_TYPE(xar) TYPEOF(**(xar)->chunk) + +#define XAR_ELEM_T(xar, T, idx) (T*)(xar_get((XarHdr*)(xar), idx, sizeof(T))) +#define XAR_PUT_T(xar, T, a, idx) (T*)(xar_put((XarHdr*)(xar), idx, sizeof(T), a)) +#define XAR_PUSH_T(xar, T, a, ...) (*XAR_PUT_T(xar, T, a, (xar)->n++) = (__VA_ARGS__)) + +#define XAR_ELEM(xar, idx) XAR_ELEM_T(xar, XAR_TYPE(xar), idx) +#define XAR_PUT(xar, a, idx) XAR_PUT_T(xar, XAR_TYPE(xar), a, idx) +#define XAR_PUSH(xar, a, ...) XAR_PUSH_T(xar, XAR_TYPE(xar), a, __VA_ARGS__) + +#define XAR_GET(xar, idx) (*XAR_ELEM_T(xar, XAR_TYPE(xar), idx)) +#define XAR_SET(xar, idx, ...) (*XAR_ELEM_T(xar, XAR_TYPE(xar), idx) = (__VA_ARGS__)) + #define XAR_CHUNK(idx) (unsigned)(31 - stdc_leading_zeros(((unsigned)(idx) / XAR_INIT_SZ) + 1)) #define XAR_CHUNK_SZ(chnk) (XAR_INIT_SZ << (chnk)) #define XAR_SLOT(chnk, idx) ((idx) - (XAR_CHUNK_SZ(chnk) - XAR_CHUNK_SZ(0))) -- cgit v1.2.3