diff options
| author | WormHeamer | 2025-11-26 01:53:33 -0500 |
|---|---|---|
| committer | WormHeamer | 2025-11-26 01:53:33 -0500 |
| commit | ef415a4d9cfaa0da72e34338208494a82247ee0f (patch) | |
| tree | bbab0d15b02b5844220981d2fbff787574772083 | |
| parent | d10773eff2a95aff224dc133513643186bae7bb4 (diff) | |
reorder XAR_* arguments to line up better with dynarr.h DA_A*
| -rw-r--r-- | xar.h | 21 |
1 files changed, 15 insertions, 6 deletions
@@ -5,7 +5,9 @@ /* see https://danielchasehooper.com/posts/segment_array/ */ #include <stdbit.h> + #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))) |
