From ce948bd9ce7363fab94321e7e83cd4231f6cf1ac Mon Sep 17 00:00:00 2001 From: Patrick Pelissier Date: Sat, 8 Sep 2018 09:02:54 +0200 Subject: [PATCH] Make INIT optional for TUPLE. --- m-tuple.h | 7 +++++-- tests/test-mtuple.c | 6 ++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/m-tuple.h b/m-tuple.h index efe2313e..ef6e6c0f 100644 --- a/m-tuple.h +++ b/m-tuple.h @@ -84,7 +84,8 @@ namespace m_tuple { #define TUPLEI_DEF2_B(name, ...) \ TUPLE_DEFINE_TYPE(name, __VA_ARGS__) \ TUPLE_DEFINE_ENUM(name, __VA_ARGS__) \ - TUPLE_DEFINE_INIT(name, __VA_ARGS__) \ + M_IF(TUPLE_ALL_INIT(__VA_ARGS__)) \ + (TUPLE_DEFINE_INIT(name, __VA_ARGS__),) \ TUPLE_DEFINE_INIT_SET(name, __VA_ARGS__) \ TUPLE_DEFINE_INIT_SET2(name, __VA_ARGS__) \ TUPLE_DEFINE_SET(name, __VA_ARGS__) \ @@ -421,6 +422,8 @@ namespace m_tuple { #define TUPLE_TEST_METHOD_P(method, trio) \ M_APPLY(TUPLE_TEST_METHOD2_P, method, M_OPFLAT trio) +#define TUPLE_ALL_INIT(...) \ + M_REDUCE2(TUPLE_TEST_METHOD_P, M_AND, INIT, __VA_ARGS__) #define TUPLE_ALL_CMP(...) \ M_REDUCE2(TUPLE_TEST_METHOD_P, M_AND, CMP, __VA_ARGS__) #define TUPLE_ALL_EQUAL(...) \ @@ -445,7 +448,7 @@ namespace m_tuple { M_REDUCE2(TUPLE_TEST_METHOD_P, M_AND, CLEAN, __VA_ARGS__) #define TUPLEI_OPLIST(name, ...) \ - (INIT(M_C(name,_init)), \ + (M_IF_METHOD_ALL(INIT, __VA_ARGS__)(INIT(M_C(name,_init)),), \ INIT_SET(M_C(name, _init_set)), \ SET(M_C(name,_set)), \ CLEAR(M_C(name, _clear)), \ diff --git a/tests/test-mtuple.c b/tests/test-mtuple.c index 43932eff..bb101998 100644 --- a/tests/test-mtuple.c +++ b/tests/test-mtuple.c @@ -33,6 +33,11 @@ TUPLE_DEF2(pair, (value, testobj_t, TESTOBJ_OPLIST) ) END_COVERAGE +// Minimum definition +TUPLE_DEF2(pair_min, + (key1, string_t, (INIT_SET(string_init_set), SET(string_set), CLEAR(string_clear))), + (key2, string_t, (INIT_SET(string_init_set), SET(string_set), CLEAR(string_clear)))) + // No cmp defined TUPLE_DEF2(triple, (key, string_t, (INIT(string_init), INIT_SET(string_init_set), SET(string_set), CLEAR(string_clear), CMP(string_cmp))), @@ -66,6 +71,7 @@ TUPLE_DEF2(rtuple2, (name, string_t), (value, int)) TUPLE_DEF2(rtuple3, (name, string_t), (ituple2, rtuple2_t), (ituple, rtuple_t) ) + static void check_swap(void) { pair_str_t p1, p2;