diff --git a/m-algo.h b/m-algo.h index 48d33a77..cfbb76ff 100644 --- a/m-algo.h +++ b/m-algo.h @@ -53,6 +53,11 @@ (ALGOI_REDUCE_MAP(dest, cont, contOp, __VA_ARGS__), \ ALGOI_REDUCE_MAP_ARG(dest, cont, contOp, __VA_ARGS__) ) ) +#define ALGO_INIT_VA(dest, contOp, ...) do { \ + M_GET_INIT contOp (dest); \ + M_MAP2(ALGOI_INIT_VA_FUNC, (dest, M_GET_PUSH contOp, ) , __VA_ARGS__); \ + } while (0) + /********************************** INTERNAL ************************************/ #define ALGOI_DEF(name, container_t, cont_oplist, type_t, type_oplist, it_t) \ @@ -421,4 +426,7 @@ M_GET_CLEAR M_GET_OPLIST cont_oplist (m_tmp); \ } while (0) +#define ALGOI_INIT_VA_FUNC(d, a) \ + M_RET_ARG2 d (M_RET_ARG1 d, a) ; + #endif diff --git a/tests/test-malgo.c b/tests/test-malgo.c index b7c09f05..49f4231d 100644 --- a/tests/test-malgo.c +++ b/tests/test-malgo.c @@ -35,6 +35,10 @@ static void test_list(void) ALGO_MAP(l, LIST_OPLIST(int), g, 100); list_int_clear(l); + + ALGO_INIT_VA(l, LIST_OPLIST(int), 1, 2, 3, 4, 5); + assert (list_int_size(l) == 5); + list_int_clear(l); } static void test_array(void) @@ -52,6 +56,10 @@ static void test_array(void) assert( algo_array_count(l, -1) == 0); array_int_clear(l); + + ALGO_INIT_VA(l, ARRAY_OPLIST(int), 1, 2, 3, 4, 5); + assert (array_int_size(l) == 5); + array_int_clear(l); } static void test_string(void)