Add oplist for variant

(still missing some operators)
This commit is contained in:
Patrick Pelissier committed 2017-02-26 23:52:11 +01:00
1 parent ec109dddf9
commit 0363035bce
1 file changed
+20
+20
View File
@@ -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