Add oplist for variant
(still missing some operators)
This commit is contained in:
1 parent
ec109dddf9
commit
0363035bce
1 file changed
+20
+20
@@ -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
|
||||
Reference in new issue
Block a user