From 5b89196cd73a100f53a787db5016240549cd2f3a Mon Sep 17 00:00:00 2001 From: Patrick Pelissier Date: Wed, 19 Aug 2020 22:39:52 +0200 Subject: [PATCH] Add macro TUPLE_DEF2_AS --- m-tuple.h | 10 ++++++++++ tests/test-mtuple.c | 13 +++++++++++++ 2 files changed, 23 insertions(+) diff --git a/m-tuple.h b/m-tuple.h index a96e11b9..8ab743ed 100644 --- a/m-tuple.h +++ b/m-tuple.h @@ -38,6 +38,16 @@ M_END_PROTECTED_CODE +/* Define the tuple type and functions + as the given name. + USAGE: + TUPLE_DEF2_AS(name, name_t, [(field1, type1[, oplist1]), (field2, type2[, oplist2]), ...] ) */ +#define TUPLE_DEF2_AS(name, name_t, ...) \ + M_BEGIN_PROTECTED_CODE \ + TUPLEI_DEF2_P1( (name, name_t TUPLEI_INJECT_GLOBAL(__VA_ARGS__)) ) \ + M_END_PROTECTED_CODE + + /* Define the oplist of a tuple. USAGE: TUPLE_OPLIST(name[, oplist of the first type, ...]) */ #define TUPLE_OPLIST(...) \ diff --git a/tests/test-mtuple.c b/tests/test-mtuple.c index 54c481e3..05a649ec 100644 --- a/tests/test-mtuple.c +++ b/tests/test-mtuple.c @@ -81,6 +81,9 @@ TUPLE_DEF2(rtuple3, (name, string_t), (ituple2, rtuple2_t), (ituple, rtuple_t) ) TUPLE_DEF2(rtuple4, (value, rtuple3_t) ) #define M_OPL_rtuple4_t() TUPLE_OPLIST(rtuple4, M_OPL_rtuple4_t() ) +TUPLE_DEF2_AS(vector, Vector, (x, double), (y, double), (z, double) ) +#define M_OPL_Vector() TUPLE_OPLIST(vector, M_DEFAULT_OPLIST ) + static void check_swap(void) { pair_str_t p1, p2; @@ -214,6 +217,15 @@ static void check_chaining_tuple(void) rtuple4_clear(r); } +static void test_double(void) +{ + M_LET( (v, 1.0, 2.0, 3.0), Vector ) { + assert (*vector_cget_at_x(v) == 1.0 ); + assert (*vector_cget_at_y(v) == 2.0 ); + assert (*vector_cget_at_z(v) == 3.0 ); + } +} + int main(void) { test1(); @@ -221,5 +233,6 @@ int main(void) check_swap(); check_clean(); check_chaining_tuple(); + test_double(); exit(0); }