Skip to content

Commit

Permalink
Make INIT optional for TUPLE.
Browse files Browse the repository at this point in the history
  • Loading branch information
P-p-H-d committed Sep 8, 2018
1 parent 5eb5d24 commit ce948bd
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 2 deletions.
7 changes: 5 additions & 2 deletions m-tuple.h
Expand Up @@ -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__) \
Expand Down Expand Up @@ -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(...) \
Expand All @@ -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)), \
Expand Down
6 changes: 6 additions & 0 deletions tests/test-mtuple.c
Expand Up @@ -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))),
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit ce948bd

Please sign in to comment.