From 0363035bce902982fff41b31b3708b8e9c2b0088 Mon Sep 17 00:00:00 2001 From: Patrick Pelissier Date: Sun, 26 Feb 2017 23:52:11 +0100 Subject: [PATCH] Add oplist for variant (still missing some operators) --- m-variant.h | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/m-variant.h b/m-variant.h index 250b6ee2..5db19c68 100644 --- a/m-variant.h +++ b/m-variant.h @@ -173,6 +173,20 @@ } +#define VARIANTI_OPLIST(name, ...) \ + (INIT(M_C(name,_init)), \ + INIT_SET(M_C(name, _init_set)), \ + SET(M_C(name,_set)), \ + CLEAR(M_C(name, _clear)), \ + TYPE(M_C(name,_t)), \ + M_IF_METHOD_ALL(HASH, __VA_ARGS__)(HASH(M_C(name, _hash)),), \ + M_IF_METHOD_ALL(EQUAL, __VA_ARGS__)(EQUAL(M_C(name, _equal_p)),), \ + M_IF_METHOD_ALL(GET_STR, __VA_ARGS__)(EQUAL(M_C(name, _get_str)),), \ + M_IF_METHOD_ALL(IN_STR, __VA_ARGS__)(EQUAL(M_C(name, _in_str)),), \ + M_IF_METHOD_ALL(OUT_STR, __VA_ARGS__)(EQUAL(M_C(name, _out_str)),), \ + M_IF_METHOD_ALL(INIT_MOVE, __VA_ARGS__)(EQUAL(M_C(name, _init_move)),), \ + M_IF_METHOD_ALL(MOVE, __VA_ARGS__)(EQUAL(M_C(name, _move)),), \ + ) /********************** External interface *************************/ @@ -186,5 +200,11 @@ VARIANTI_DEFINE_SETTER(name, __VA_ARGS__) \ VARIANTI_DEFINE_GETTER(name, __VA_ARGS__) \ +/* Define the oplist of a tuple. + VARIANT_OPLIST(name[, oplist of the first type, ...]) */ +#define VARIANT_OPLIST(...) \ + M_IF_NARGS_EQ1(__VA_ARGS__) \ + (VARIANTI_OPLIST(__VA_ARGS__, () ), \ + VARIANTI_OPLIST(__VA_ARGS__ )) #endif