From e68480f2fc508ce73cad331ce4e8439e07d25702 Mon Sep 17 00:00:00 2001 From: Kimplul Date: Mon, 1 Sep 2025 22:00:02 +0300 Subject: use <> as expansion characters + I kind of like the 'symmetry' of <> being 'self' and being some parameter, but having to type lots of extra <*> is a bit annoying, and might also be an issue for C++. Still, enough functionality for a hashmap example --- example_vec/new/main.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'example_vec/new/main.c') diff --git a/example_vec/new/main.c b/example_vec/new/main.c index 4849cb3..a756281 100644 --- a/example_vec/new/main.c +++ b/example_vec/new/main.c @@ -1,12 +1,21 @@ #include + +/* an empty trait matches anything, this would presumably be defined in a + * library somewhere and then included everywhere */ +typedef any {} + #include "vec.h" #define foreach(name, i, s) \ for (name##_iter i = name##_begin(s); !name##_end(s, i); i = name##_next(i)) -typedef summable_vec[summable type]() = vec[type](){ - type <>_sum(struct <> *v) { - type sum = 0; +/* traits aren't really implemented fully yet but this would check for a + * function like <>_add(<> a, <> b) or something along those lines */ +typedef summable {} + +typedef summable_vec[summable type]() = vec[](){ + <>_sum(struct <> *v) { + sum = 0; for (size_t i = 0; i < v->n; ++i) { sum += v->buf[i]; } -- cgit v1.2.3