From 3a5815d4bd000cb250e3736db7ad02f63d065bfe Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Fri, 6 Dec 2024 15:18:25 -0500 Subject: Improvements and fixes for assigning to table keys --- stdlib/tables.h | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'stdlib') diff --git a/stdlib/tables.h b/stdlib/tables.h index cd19efdd..50ecc453 100644 --- a/stdlib/tables.h +++ b/stdlib/tables.h @@ -35,6 +35,14 @@ void *Table$get(Table_t t, const void *key, const TypeInfo_t *type); const Table_t t = table_expr; const key_t k = key_expr; \ val_t *nonnull_var = Table$get(t, &k, info_expr); \ nonnull_var ? nonnull_expr : null_expr; }) +#define Table$get_or_setdefault(table_expr, key_t, val_t, key_expr, default_expr, info_expr) ({ \ + Table_t *t = &table_expr; const key_t k = key_expr; \ + val_t *v = Table$get(*t, &k, info_expr); \ + v ? v : (val_t*)Table$reserve(t, &k, (val_t[1]){default_expr}, info_expr); }) +#define Table$get_or_default(table_expr, key_t, val_t, key_expr, default_expr, info_expr) ({ \ + const Table_t t = table_expr; const key_t k = key_expr; \ + val_t *v = Table$get(t, &k, info_expr); \ + v ? *v : default_expr; }) #define Table$has_value(table_expr, key_expr, info_expr) ({ \ const Table_t t = table_expr; __typeof(key_expr) k = key_expr; \ (Table$get(t, &k, info_expr) != NULL); }) -- cgit v1.2.3