From 4ef1b079cb1a7280f8c9ce7f069cc9619924043a Mon Sep 17 00:00:00 2001 From: Patrick Pelissier Date: Sun, 5 Aug 2018 11:08:18 +0200 Subject: [PATCH] Can omit optlist in B+TREE definition --- m-bptree.h | 22 ++++++++++++++-------- tests/test-mbptree.c | 1 + 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/m-bptree.h b/m-bptree.h index 73e1c3ea..c07f9a0d 100644 --- a/m-bptree.h +++ b/m-bptree.h @@ -29,20 +29,26 @@ /* Define a B+tree which maps a key to a value, of size N with its associated functions. - USAGE: BPTREE_DEF2(name, N, key_t, key_oplist, value_t, value_oplist) */ -#define BPTREE_DEF2(name, N, key_t, key_oplist, value_t, value_oplist) \ - BPTREEI_DEF2(name, N, key_t, key_oplist, value_t, value_oplist, 1, \ - M_C(name, _t), M_C(name, _node_t), M_C(name, _pit_t), \ - M_C(name, _it_t)) + USAGE: + BPTREE_DEF2(name, N, key_t, key_oplist, value_t, value_oplist) + OR + BPTREE_DEF2(name, N, key_t, value_t) +*/ +#define BPTREE_DEF2(name, N, key_type, ...) \ + BPTREEI_DEF_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \ + ((name, N, key_type, M_GLOBAL_OPLIST_OR_DEF(key_type), __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__), 1, M_C(name, _t), M_C(name, _node_t), M_C(name, _pit_t), M_C(name, _it_t) ), \ + (name, N, key_type, __VA_ARGS__, 1, M_C(name, _t), M_C(name, _node_t), M_C(name, _pit_t), M_C(name, _it_t)))) + /* Define a B+tree of a given type, of size N. with its associated functions USAGE: BPTREE_DEF(name, N, type, [, oplist_of_the_type]) */ #define BPTREE_DEF(name, N, ...) \ - BPTREEI_DEF(M_IF_NARGS_EQ1(__VA_ARGS__) \ + BPTREEI_DEF_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \ ((name, N, __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__), __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__), 0, M_C(name, _t), M_C(name, _node_t), M_C(name, _pit_t), M_C(name, _it_t) ), \ (name, N, __VA_ARGS__, __VA_ARGS__, 0, M_C(name, _t), M_C(name, _node_t), M_C(name, _pit_t), M_C(name, _it_t) ))) + /* Define the oplist of a rbtree of type (from BPTREE_DEF). USAGE: BPTREE_OPLIST(name [, oplist_of_the_type]) */ #define BPTREE_OPLIST(...) \ @@ -163,9 +169,9 @@ #define BPTREEI_MAX_STACK ((int)(CHAR_BIT*sizeof (size_t))) // Deferred evaluation. -#define BPTREEI_DEF(arg) BPTREEI_DEF2 arg +#define BPTREEI_DEF_P1(arg) BPTREEI_DEF_P2 arg -#define BPTREEI_DEF2(name, N, key_t, key_oplist, value_t, value_oplist, isMap, tree_t, node_t, pit_t, it_t) \ +#define BPTREEI_DEF_P2(name, N, key_t, key_oplist, value_t, value_oplist, isMap, tree_t, node_t, pit_t, it_t) \ \ M_IF(isMap)( \ typedef struct M_C(name, _pair_s) { \ diff --git a/tests/test-mbptree.c b/tests/test-mbptree.c index 3da263fd..6bcf0172 100644 --- a/tests/test-mbptree.c +++ b/tests/test-mbptree.c @@ -32,6 +32,7 @@ BPTREE_DEF2(btree, 3, int, M_DEFAULT_OPLIST, int, M_DEFAULT_OPLIST) END_COVERAGE BPTREE_DEF2(btree_my, 3, testobj_t, TESTOBJ_CMP_OPLIST, testobj_t, TESTOBJ_CMP_OPLIST) +BPTREE_DEF2(btree_int, 17, int, int) BPTREE_DEF(btree_intset, 13, int) BPTREE_DEF(btree_myset, 15, testobj_t, TESTOBJ_CMP_OPLIST)