From 930c09f46d1e249fc889e8f1179046a48c1eaf32 Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Thu, 8 Feb 2024 00:52:18 -0500 Subject: More features and progress --- util.h | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'util.h') diff --git a/util.h b/util.h index 416c0b3e..90ac8b3d 100644 --- a/util.h +++ b/util.h @@ -26,4 +26,29 @@ char *heap_str(const char *str); char *heap_strf(const char *fmt, ...); CORD CORD_asprintf(const char *fmt, ...); +#define REVERSE_LIST(list) do { \ + __typeof(list) _prev = NULL; \ + __typeof(list) _next = NULL; \ + auto _current = list; \ + while (_current != NULL) { \ + _next = _current->next; \ + _current->next = _prev; \ + _prev = _current; \ + _current = _next; \ + } \ + list = _prev; \ +} while(0) + +#define LIST_MAP(src, var, ...) ({\ + __typeof(src) __mapped = NULL; \ + __typeof(src) *__next = &__mapped; \ + for (__typeof(src) var = src; var; var = var->next) { \ + *__next = GC_MALLOC(sizeof(__typeof(*(src)))); \ + **__next = *var; \ + **__next = (__typeof(*(src))){__VA_ARGS__}; \ + __next = &((*__next)->next); \ + } \ + __mapped; }) + + // vim: ts=4 sw=0 et cino=L2,l1,(0,W4,m1,\:0 -- cgit v1.2.3