From 692c0487af0eb656a113085bca010266e6fd4913 Mon Sep 17 00:00:00 2001 From: Patrick Pelissier Date: Thu, 17 Apr 2025 23:20:48 +0200 Subject: [PATCH] Update oplist for new memory model --- m-bptree.h | 81 +++++++++++++++++++++++++++++++++++++++++++++++-- m-deque.h | 44 ++++++++++++++++++++++++++- m-dict.h | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++ m-list.h | 46 ++++++++++++++++++++++++++++ m-prioqueue.h | 38 ++++++++++++++++++++++- m-queue.h | 14 ++++----- m-rbtree.h | 42 +++++++++++++++++++++++++- m-tuple.h | 26 ++++++++++++++++ m-variant.h | 26 ++++++++++++++++ 9 files changed, 387 insertions(+), 13 deletions(-) diff --git a/m-bptree.h b/m-bptree.h index b1dcf01b..93ea8fb7 100644 --- a/m-bptree.h +++ b/m-bptree.h @@ -156,6 +156,7 @@ ((M_LIB_ERROR(ARGUMENT_OF_BPTREE_OPLIST_IS_NOT_AN_OPLIST, name, oplist))) /* OPLIST definition of a b+tree (global tree) */ +#ifndef M_USE_POOL #define M_BPTR33_KEY_OPLIST_P3(name, oplist) \ (INIT(M_F(name, _init)), \ INIT_SET(M_F(name, _init_set)), \ @@ -189,7 +190,40 @@ M_IF_METHOD(EQUAL, oplist)(EQUAL(M_F(name, _equal_p)),), \ M_IF_METHOD(HASH, oplist)(HASH(M_F(name, _hash)),) \ ) - +#else +#define M_BPTR33_KEY_OPLIST_P3(name, oplist) \ + (INIT(API_0P(M_F(name, _init))), \ + INIT_SET(API_0P(M_F(name, _init_set))), \ + INIT_WITH(API_1(M_INIT_VAI)), \ + SET(API_0P(M_F(name, _set))), \ + CLEAR(API_0P(M_F(name, _clear))), \ + INIT_MOVE(M_F(name, _init_move)), \ + MOVE(API_0P(M_F(name, _move))), \ + SWAP(M_F(name, _swap)), \ + NAME(name), TYPE(M_F(name,_ct)), GENTYPE(struct M_F(name,_s)*), \ + SUBTYPE(M_F(name, _subtype_ct)), \ + IT_TYPE(M_F(name, _it_ct)), \ + IT_FIRST(M_F(name,_it)), \ + IT_SET(M_F(name,_it_set)), \ + IT_END(M_F(name,_it_end)), \ + IT_END_P(M_F(name,_end_p)), \ + IT_EQUAL_P(M_F(name,_it_equal_p)), \ + IT_NEXT(M_F(name,_next)), \ + IT_CREF(M_F(name,_cref)), \ + RESET(API_0P(M_F(name,_reset))), \ + PUSH(API_0P(M_F(name,_push))), \ + GET_MIN(M_F(name,_min)), \ + GET_MAX(M_F(name,_max)), \ + M_IF_METHOD(GET_STR, oplist)(API_0P(GET_STR(M_F(name, _get_str))),), \ + M_IF_METHOD(PARSE_STR, oplist)(PARSE_STR(API_0P(M_F(name, _parse_str))),), \ + M_IF_METHOD(OUT_STR, oplist)(OUT_STR(M_F(name, _out_str)),), \ + M_IF_METHOD(IN_STR, oplist)(IN_STR(API_0P(M_F(name, _in_str))),), \ + M_IF_METHOD(OUT_SERIAL, oplist)(OUT_SERIAL(API_0P(M_F(name, _out_serial))),), \ + M_IF_METHOD(IN_SERIAL, oplist)(IN_SERIAL(API_0P(M_F(name, _in_serial))),), \ + M_IF_METHOD(EQUAL, oplist)(EQUAL(M_F(name, _equal_p)),), \ + M_IF_METHOD(HASH, oplist)(HASH(M_F(name, _hash)),) \ + ) +#endif /* Deferred evaluation */ #define M_BPTR33_OPLIST2_P1(arg) M_BPTR33_OPLIST2_P2 arg @@ -205,6 +239,7 @@ ((M_LIB_ERROR(ARGUMENT_OF_BPTREE_OPLIST_IS_NOT_AN_OPLIST, name, key_oplist, value_oplist))) /* Final definition of the oplist (associative array) */ +#ifndef M_USE_POOL #define M_BPTR33_OPLIST2_P4(name, key_oplist, value_oplist) \ (INIT(M_F(name, _init)), \ INIT_SET(M_F(name, _init_set)), \ @@ -233,7 +268,7 @@ VALUE_TYPE(M_F(name, _value_ct)), \ SET_KEY(M_F(name, _set_at)), \ GET_KEY(M_F(name, _get)), \ - SAFE_GET_KEY(M_F(name, _safe_get)) \ + SAFE_GET_KEY(M_F(name, _safe_get)), \ ERASE_KEY(M_F(name, _erase)), \ KEY_OPLIST(key_oplist), \ VALUE_OPLIST(value_oplist), \ @@ -245,7 +280,47 @@ M_IF_METHOD_BOTH(EQUAL, key_oplist, value_oplist)(EQUAL(M_F(name, _equal_p)),), \ M_IF_METHOD_BOTH(HASH, key_oplist, value_oplist)(HASH(M_F(name, _hash)),) \ ) - +#else +#define M_BPTR33_OPLIST2_P4(name, key_oplist, value_oplist) \ + (INIT(API_0P(M_F(name, _init))), \ + INIT_SET(API_0P(M_F(name, _init_set))), \ + INIT_WITH(API_1(M_INIT_KEY_VAI)), \ + SET(API_0P(M_F(name, _set))), \ + CLEAR(API_0P(M_F(name, _clear))), \ + INIT_MOVE(M_F(name, _init_move)), \ + MOVE(API_0P(M_F(name, _move))), \ + SWAP(M_F(name, _swap)), \ + NAME(name), TYPE(M_F(name,_ct)), GENTYPE(struct M_F(name,_s)*), \ + SUBTYPE(M_F(name, _subtype_ct)), \ + EMPTY_P(M_F(name,_empty_p)), \ + IT_TYPE(M_F(name, _it_ct)), \ + IT_FIRST(M_F(name,_it)), \ + IT_SET(M_F(name,_it_set)), \ + IT_END(M_F(name,_it_end)), \ + IT_END_P(M_F(name,_end_p)), \ + IT_EQUAL_P(M_F(name,_it_equal_p)), \ + IT_NEXT(M_F(name,_next)), \ + IT_CREF(M_F(name,_cref)), \ + RESET(API_0P(M_F(name,_reset))), \ + GET_MIN(M_F(name,_min)), \ + GET_MAX(M_F(name,_max)), \ + KEY_TYPE(M_F(name, _key_ct)), \ + VALUE_TYPE(M_F(name, _value_ct)), \ + SET_KEY(API_0P(M_F(name, _set_at))), \ + GET_KEY(M_F(name, _get)), \ + SAFE_GET_KEY(API_0P(M_F(name, _safe_get))), \ + ERASE_KEY(API_0P(M_F(name, _erase))), \ + KEY_OPLIST(key_oplist), \ + VALUE_OPLIST(value_oplist), \ + M_IF_METHOD_BOTH(PARSE_STR, key_oplist, value_oplist)(PARSE_STR(API_0P(M_F(name, _parse_str))),), \ + M_IF_METHOD_BOTH(OUT_STR, key_oplist, value_oplist)(OUT_STR(M_F(name, _out_str)),), \ + M_IF_METHOD_BOTH(IN_STR, key_oplist, value_oplist)(IN_STR(API_0P(M_F(name, _in_str))),), \ + M_IF_METHOD_BOTH(OUT_SERIAL, key_oplist, value_oplist)(OUT_SERIAL(API_0P(M_F(name, _out_serial))),), \ + M_IF_METHOD_BOTH(IN_SERIAL, key_oplist, value_oplist)(IN_SERIAL(API_0P(M_F(name, _in_serial))),), \ + M_IF_METHOD_BOTH(EQUAL, key_oplist, value_oplist)(EQUAL(M_F(name, _equal_p)),), \ + M_IF_METHOD_BOTH(HASH, key_oplist, value_oplist)(HASH(M_F(name, _hash)),) \ + ) +#endif /******************************** INTERNAL ***********************************/ diff --git a/m-deque.h b/m-deque.h index 062e3703..b1d41390 100644 --- a/m-deque.h +++ b/m-deque.h @@ -1057,6 +1057,7 @@ ((M_LIB_ERROR(ARGUMENT_OF_DEQUE_OPLIST_IS_NOT_AN_OPLIST, name, oplist))) /* OPLIST definition of a deque */ +#ifndef M_USE_POOL #define M_D3QU3_OPLIST_P3(name, oplist) \ (INIT(M_F(name, _init)) \ ,INIT_SET(M_F(name, _init_set)) \ @@ -1097,7 +1098,48 @@ ,M_IF_METHOD(EQUAL, oplist)(EQUAL(M_F(name, _equal_p)),) \ ,M_IF_METHOD(HASH, oplist)(HASH(M_F(name, _hash)),) \ ) - +#else +#define M_D3QU3_OPLIST_P3(name, oplist) \ + (INIT(API_0P(M_F(name, _init))) \ + ,INIT_SET(API_0P(M_F(name, _init_set))) \ + ,INIT_WITH(API_1(M_INIT_WITH_VAI)) \ + ,SET(API_0P(M_F(name, _set))) \ + ,CLEAR(API_0P(M_F(name, _clear))) \ + ,INIT_MOVE(M_F(name, _init_move)) \ + ,MOVE(API_0P(M_F(name, _move))) \ + ,SWAP(M_F(name, _swap)) \ + ,NAME(name) \ + ,TYPE(M_F(name,_ct)), GENTYPE(struct M_F(name,_s)*) \ + ,SUBTYPE(M_F(name, _subtype_ct)) \ + ,EMPTY_P(M_F(name,_empty_p)) \ + ,IT_TYPE(M_F(name,_it_ct)) \ + ,IT_FIRST(M_F(name,_it)) \ + ,IT_LAST(M_F(name,_it_last)) \ + ,IT_END(M_F(name,_it_end)) \ + ,IT_SET(M_F(name,_it_set)) \ + ,IT_END_P(M_F(name,_end_p)) \ + ,IT_LAST_P(M_F(name,_last_p)) \ + ,IT_EQUAL_P(M_F(name,_it_equal_p)) \ + ,IT_NEXT(M_F(name,_next)) \ + ,IT_PREVIOUS(M_F(name,_previous)) \ + ,IT_REF(M_F(name,_ref)) \ + ,IT_CREF(M_F(name,_cref)) \ + ,IT_REMOVE(API_0P(M_F(name,_remove))) \ + ,RESET(API_0P(M_F(name,_reset))) \ + ,GET_SIZE(M_F(name, _size)) \ + ,PUSH(API_0P(M_F(name,_push_back))) \ + ,POP(API_0P(M_F(name,_pop_front))) \ + ,OPLIST(oplist) \ + ,M_IF_METHOD(GET_STR, oplist)(API_0P(GET_STR(M_F(name, _get_str))),) \ + ,M_IF_METHOD(PARSE_STR, oplist)(API_0P(PARSE_STR(M_F(name, _parse_str))),) \ + ,M_IF_METHOD(OUT_STR, oplist)(OUT_STR(M_F(name, _out_str)),) \ + ,M_IF_METHOD(IN_STR, oplist)(IN_STR(API_0P(M_F(name, _in_str))),) \ + ,M_IF_METHOD(OUT_SERIAL, oplist)(OUT_SERIAL(API_0P(M_F(name, _out_serial))),) \ + ,M_IF_METHOD(IN_SERIAL, oplist)(IN_SERIAL(API_0P(M_F(name, _in_serial))),) \ + ,M_IF_METHOD(EQUAL, oplist)(EQUAL(M_F(name, _equal_p)),) \ + ,M_IF_METHOD(HASH, oplist)(HASH(M_F(name, _hash)),) \ + ) +#endif /********************************* INTERNAL **********************************/ diff --git a/m-dict.h b/m-dict.h index 642aaf17..f946991d 100644 --- a/m-dict.h +++ b/m-dict.h @@ -1253,6 +1253,7 @@ M_ARRAY_DEF(m_array_index, m_indexhash_t, M_POD_OPLIST) /* Define the oplist of a dictionary NOTE: IT_REF is not exported so that the contained appears as not modifiable by algorithm.*/ +#ifndef M_USE_POOL #define M_D1CT_OPLIST_P4(name, key_oplist, value_oplist) \ (INIT(M_F(name, _init)), \ INIT_SET(M_F(name, _init_set)), \ @@ -1292,6 +1293,46 @@ M_ARRAY_DEF(m_array_index, m_indexhash_t, M_POD_OPLIST) ,M_IF_METHOD_BOTH(IN_SERIAL, key_oplist, value_oplist)(IN_SERIAL(M_F(name, _in_serial)),) \ ,M_IF_METHOD(EQUAL, value_oplist)(EQUAL(M_F(name, _equal_p)),) \ ) +#else +#define M_D1CT_OPLIST_P4(name, key_oplist, value_oplist) \ + (INIT(API_0P(M_F(name, _init))), \ + INIT_SET(API_0P(M_F(name, _init_set))), \ + INIT_WITH(API_1(M_INIT_KEY_VAI)), \ + SET(API_0P(M_F(name, _set))), \ + CLEAR(API_0P(M_F(name, _clear))), \ + INIT_MOVE(M_F(name, _init_move)), \ + MOVE(API_0P(M_F(name, _move))), \ + SWAP(M_F(name, _swap)), \ + RESET(API_0P(M_F(name, _reset))), \ + NAME(name), TYPE(M_F(name, _ct)), GENTYPE(struct M_F(name,_s)*), \ + SUBTYPE(M_F(name, _subtype_ct)), \ + EMPTY_P(M_F(name,_empty_p)), \ + IT_TYPE(M_F(name, _it_ct)), \ + IT_FIRST(M_F(name,_it)), \ + IT_SET(M_F(name, _it_set)), \ + IT_END(M_F(name,_it_end)), \ + IT_END_P(M_F(name,_end_p)), \ + IT_LAST_P(M_F(name,_last_p)), \ + IT_NEXT(M_F(name,_next)), \ + IT_CREF(M_F(name,_cref)) \ + ,KEY_TYPE(M_F(name, _key_ct)) \ + ,VALUE_TYPE(M_F(name, _value_ct)) \ + ,SET_KEY(API_0P(M_F(name, _set_at))) \ + ,GET_KEY(M_F(name, _get)) \ + ,SAFE_GET_KEY(API_0P(M_F(name, _safe_get))) \ + ,ERASE_KEY(API_0P(M_F(name, _erase))) \ + ,KEY_OPLIST(key_oplist) \ + ,VALUE_OPLIST(value_oplist) \ + ,GET_SIZE(M_F(name, _size)) \ + ,M_IF_METHOD_BOTH(GET_STR, key_oplist, value_oplist)(API_0P(GET_STR(M_F(name, _get_str))),) \ + ,M_IF_METHOD_BOTH(PARSE_STR, key_oplist, value_oplist)(API_0P(PARSE_STR(M_F(name, _parse_str))),) \ + ,M_IF_METHOD_BOTH(OUT_STR, key_oplist, value_oplist)(OUT_STR(M_F(name, _out_str)),) \ + ,M_IF_METHOD_BOTH(IN_STR, key_oplist, value_oplist)(IN_STR(API_0P(M_F(name, _in_str))),) \ + ,M_IF_METHOD_BOTH(OUT_SERIAL, key_oplist, value_oplist)(OUT_SERIAL(API_0P(M_F(name, _out_serial))),) \ + ,M_IF_METHOD_BOTH(IN_SERIAL, key_oplist, value_oplist)(IN_SERIAL(API_0P(M_F(name, _in_serial))),) \ + ,M_IF_METHOD(EQUAL, value_oplist)(EQUAL(M_F(name, _equal_p)),) \ + ) +#endif /* Deferred evaluation for the definition, so that all arguments are evaluated before further expansion */ @@ -1308,6 +1349,7 @@ M_ARRAY_DEF(m_array_index, m_indexhash_t, M_POD_OPLIST) /* Define the oplist of a set Note: IT_REF is not exported so that the contained appears as not modifiable */ +#ifndef M_USE_POOL #define M_D1CT_SET_OPLIST_P3(name, oplist) \ (INIT(M_F(name, _init)), \ INIT_SET(M_F(name, _init_set)), \ @@ -1348,6 +1390,47 @@ M_ARRAY_DEF(m_array_index, m_indexhash_t, M_POD_OPLIST) ,M_IF_METHOD(IN_SERIAL, oplist)(IN_SERIAL(M_F(name, _in_serial)),) \ ,EQUAL(M_F(name, _equal_p)), \ ) +#else +#define M_D1CT_SET_OPLIST_P3(name, oplist) \ + (INIT(API_0P(M_F(name, _init))), \ + INIT_SET(API_0P(M_F(name, _init_set))), \ + INIT_WITH(API_1(M_INIT_VAI)), \ + SET(API_0P(M_F(name, _set))), \ + CLEAR(API_0P(M_F(name, _clear))), \ + INIT_MOVE(M_F(name, _init_move)), \ + MOVE(API_0P(M_F(name, _move))), \ + SWAP(M_F(name, _swap)), \ + RESET(API_0P(M_F(name, _reset))), \ + NAME(name), TYPE(M_F(name, _ct)), GENTYPE(struct M_F(name,_s)*), \ + SUBTYPE(M_F(name, _subtype_ct)), \ + EMPTY_P(M_F(name,_empty_p)), \ + PUSH(API_0P(M_F(name,_push))), \ + KEY_TYPE(M_F(name, _key_ct)), \ + VALUE_TYPE(M_F(name, _key_ct)), \ + GET_KEY(M_F(name, _get)), \ + SAFE_GET_KEY(API_0P(M_F(name, _safe_get))), \ + ERASE_KEY(API_0P(M_F(name, _erase))), \ + KEY_OPLIST(oplist), \ + VALUE_OPLIST(oplist), \ + GET_SIZE(M_F(name, _size)), \ + IT_TYPE(M_F(name, _it_ct)), \ + IT_FIRST(M_F(name,_it)), \ + IT_SET(M_F(name, _it_set)), \ + IT_END(M_F(name,_it_end)), \ + IT_END_P(M_F(name,_end_p)), \ + IT_LAST_P(M_F(name,_last_p)), \ + IT_NEXT(M_F(name,_next)), \ + IT_CREF(M_F(name,_cref)) \ + ,OPLIST(oplist) \ + ,M_IF_METHOD(GET_STR, oplist)(GET_STR(API_0P(M_F(name, _get_str))),) \ + ,M_IF_METHOD(PARSE_STR, oplist)(PARSE_STR(API_0P(M_F(name, _parse_str))),) \ + ,M_IF_METHOD(OUT_STR, oplist)(OUT_STR(M_F(name, _out_str)),) \ + ,M_IF_METHOD(IN_STR, oplist)(IN_STR(API_0P(M_F(name, _in_str))),) \ + ,M_IF_METHOD(OUT_SERIAL, oplist)(OUT_SERIAL(API_0P(M_F(name, _out_serial))),) \ + ,M_IF_METHOD(IN_SERIAL, oplist)(IN_SERIAL(API_0P(M_F(name, _in_serial))),) \ + ,EQUAL(M_F(name, _equal_p)), \ + ) +#endif /******************************** INTERNAL ***********************************/ diff --git a/m-list.h b/m-list.h index 1a5b01ec..11c8e818 100644 --- a/m-list.h +++ b/m-list.h @@ -101,6 +101,7 @@ ((M_LIB_ERROR(ARGUMENT_OF_LIST_OPLIST_IS_NOT_AN_OPLIST, name, oplist))) /* OPLIST definition of a list and list_dual_push */ +#ifndef M_USE_POOL #define M_L1ST_OPLIST_P3(name, oplist) \ (INIT(M_F(name, _init)), \ INIT_SET(M_F(name, _init_set)), \ @@ -144,6 +145,51 @@ ,M_IF_METHOD(EQUAL, oplist)(EQUAL(M_F(name, _equal_p)),) \ ,M_IF_METHOD(HASH, oplist)(HASH(M_F(name, _hash)),) \ ) +#else +#define M_L1ST_OPLIST_P3(name, oplist) \ + (INIT(M_F(name, _init)), \ + INIT_SET(API_0P(M_F(name, _init_set))), \ + INIT_WITH(API_1(M_INIT_WITH_VAI)), \ + SET(API_0P(M_F(name, _set))), \ + CLEAR(API_0P(M_F(name, _clear))), \ + MOVE(API_0P(M_F(name, _move))), \ + INIT_MOVE(M_F(name, _init_move)), \ + SWAP(M_F(name, _swap)), \ + NAME(name), \ + TYPE(M_F(name,_ct)), GENTYPE(struct M_F(name,_s)**), \ + SUBTYPE(M_F(name,_subtype_ct)), \ + EMPTY_P(M_F(name,_empty_p)), \ + IT_TYPE(M_F(name, _it_ct)), \ + IT_FIRST(M_F(name,_it)), \ + IT_END(M_F(name,_it_end)), \ + IT_SET(M_F(name,_it_set)), \ + IT_END_P(M_F(name,_end_p)), \ + IT_EQUAL_P(M_F(name,_it_equal_p)), \ + IT_LAST_P(M_F(name,_last_p)), \ + IT_NEXT(M_F(name,_next)), \ + IT_REF(M_F(name,_ref)), \ + IT_CREF(M_F(name,_cref)), \ + IT_INSERT(API_0P(M_F(name, _insert))), \ + IT_REMOVE(API_0P(M_F(name,_remove))), \ + RESET(API_0P(M_F(name,_reset))), \ + PUSH(API_0P(M_F(name,_push_back))), \ + POP(API_0P(M_F(name,_pop_back))), \ + PUSH_MOVE(API_0P(M_F(name,_push_move))), \ + POP_MOVE(API_0P(M_F(name,_pop_move))) \ + ,SPLICE_BACK(M_F(name,_splice_back)) \ + ,SPLICE_AT(M_F(name,_splice_at)) \ + ,REVERSE(M_F(name,_reverse)) \ + ,OPLIST(oplist) \ + ,M_IF_METHOD(GET_STR, oplist)(GET_STR(API_0P(M_F(name, _get_str))),) \ + ,M_IF_METHOD(OUT_STR, oplist)(OUT_STR(M_F(name, _out_str)),) \ + ,M_IF_METHOD(PARSE_STR, oplist)(PARSE_STR(API_0P(M_F(name, _parse_str))),) \ + ,M_IF_METHOD(IN_STR, oplist)(IN_STR(API_0P(M_F(name, _in_str))),) \ + ,M_IF_METHOD(OUT_SERIAL, oplist)(OUT_SERIAL(API_0P(M_F(name, _out_serial))),) \ + ,M_IF_METHOD(IN_SERIAL, oplist)(IN_SERIAL(API_0P(M_F(name, _in_serial))),) \ + ,M_IF_METHOD(EQUAL, oplist)(EQUAL(M_F(name, _equal_p)),) \ + ,M_IF_METHOD(HASH, oplist)(HASH(M_F(name, _hash)),) \ + ) +#endif /* Deferred evaluation for the list definition, so that all arguments are evaluated before further expansion */ diff --git a/m-prioqueue.h b/m-prioqueue.h index a238ec44..77979745 100644 --- a/m-prioqueue.h +++ b/m-prioqueue.h @@ -71,6 +71,7 @@ ((M_LIB_ERROR(ARGUMENT_OF_PRIOQUEUE_OPLIST_IS_NOT_AN_OPLIST, name, oplist))) /* Define oplist of a priority queue */ +#ifndef M_USE_POOL #define M_PR1OQUEUE_OPLIST_P3(name, oplist) \ (INIT(M_F(name, _init)) \ ,INIT_SET(M_F(name, _init_set)) \ @@ -105,7 +106,42 @@ ,M_IF_METHOD(OUT_SERIAL, oplist)(OUT_SERIAL(M_F(name, _out_serial)),) \ ,M_IF_METHOD(IN_SERIAL, oplist)(IN_SERIAL(M_F(name, _in_serial)),) \ ) - +#else +#define M_PR1OQUEUE_OPLIST_P3(name, oplist) \ + (INIT(M_F(name, _init)) \ + ,INIT_SET(API_0P(M_F(name, _init_set))) \ + ,INIT_WITH(API_1(M_INIT_VAI)) \ + ,SET(API_0P(M_F(name, _set))) \ + ,CLEAR(API_0P(M_F(name, _clear))) \ + ,INIT_MOVE(M_F(name, _init_move)) \ + ,MOVE(API_0P(M_F(name, _move))) \ + ,SWAP(M_F(name, _swap)) \ + ,NAME(name) \ + ,TYPE(M_F(name,_ct)), GENTYPE(struct M_F(name,_s)*) \ + ,SUBTYPE(M_F(name, _subtype_ct)) \ + ,RESET(API_0P(M_F(name,_reset))) \ + ,PUSH(API_0P(M_F(name,_push))) \ + ,POP(API_0P(M_F(name,_pop))) \ + ,OPLIST(oplist) \ + ,EMPTY_P(M_F(name, _empty_p)) \ + ,GET_SIZE(M_F(name, _size)) \ + ,IT_TYPE(M_F(name, _it_ct)) \ + ,IT_FIRST(M_F(name,_it)) \ + ,IT_END(M_F(name,_it_end)) \ + ,IT_SET(M_F(name,_it_set)) \ + ,IT_END_P(M_F(name,_end_p)) \ + ,IT_EQUAL_P(M_F(name,_it_equal_p)) \ + ,IT_LAST_P(M_F(name,_last_p)) \ + ,IT_NEXT(M_F(name,_next)) \ + ,IT_CREF(M_F(name,_cref)) \ + ,M_IF_METHOD(GET_STR, oplist)(GET_STR(API_0P(M_F(name, _get_str))),) \ + ,M_IF_METHOD(PARSE_STR, oplist)(PARSE_STR(API_0P(M_F(name, _parse_str))),) \ + ,M_IF_METHOD(OUT_STR, oplist)(OUT_STR(M_F(name, _out_str)),) \ + ,M_IF_METHOD(IN_STR, oplist)(IN_STR(API_0P(M_F(name, _in_str))),) \ + ,M_IF_METHOD(OUT_SERIAL, oplist)(OUT_SERIAL(API_0P(M_F(name, _out_serial))),) \ + ,M_IF_METHOD(IN_SERIAL, oplist)(IN_SERIAL(API_0P(M_F(name, _in_serial))),) \ + ) +#endif /********************************** INTERNAL *********************************/ diff --git a/m-queue.h b/m-queue.h index c1bc3c71..182a2f81 100644 --- a/m-queue.h +++ b/m-queue.h @@ -87,16 +87,16 @@ /* OPLIST definition of a buffer */ #define M_QUEU3_OPLIST_P3(name, oplist) \ - (INIT(M_F(name, _i_init)) \ - ,INIT_SET(M_F(name, _init_set)) \ - ,SET(M_F(name, _set)) \ - ,CLEAR(M_F(name, _clear)) \ + (INIT(API_0P(M_F(name, _i_init))) \ + ,INIT_SET(API_0P(M_F(name, _init_set))) \ + ,SET(API_0P(M_F(name, _set))) \ + ,CLEAR(API_0P(M_F(name, _clear))) \ ,NAME(name) \ ,TYPE(M_F(name,_ct)), GENTYPE(struct M_F(name,_s)*) \ ,SUBTYPE(M_F(name, _subtype_ct)) \ - ,RESET(M_F(name,_reset)) \ - ,PUSH(M_F(name,_push)) \ - ,POP(M_F(name,_pop)) \ + ,RESET(API_0P(M_F(name,_reset))) \ + ,PUSH(API_0P(M_F(name,_push))) \ + ,POP(API_0P(M_F(name,_pop))) \ ,OPLIST(oplist) \ ,EMPTY_P(M_F(name, _empty_p)), \ ,FULL_P(M_F(name, _full_p)), \ diff --git a/m-rbtree.h b/m-rbtree.h index 57459a33..e8b6edef 100644 --- a/m-rbtree.h +++ b/m-rbtree.h @@ -71,6 +71,7 @@ /* OPLIST definition of a rbtree NOTE: IT_REF is not exported so that the container appears as not modifiable by algorithm.*/ +#ifndef M_USE_POOL #define M_RBTR33_OPLIST_P3(name, oplist) \ (INIT(M_F(name, _init)), \ INIT_SET(M_F(name, _init_set)), \ @@ -110,7 +111,46 @@ M_IF_METHOD(EQUAL, oplist)(EQUAL(M_F(name, _equal_p)),), \ M_IF_METHOD(HASH, oplist)(HASH(M_F(name, _hash)),) \ ) - +#else +#define M_RBTR33_OPLIST_P3(name, oplist) \ + (INIT(M_F(name, _init)), \ + INIT_SET(API_0P(M_F(name, _init_set))), \ + INIT_WITH(API_1(M_INIT_EMPLACE_VAI)), \ + SET(API_0P(M_F(name, _set))), \ + CLEAR(API_0P(M_F(name, _clear))), \ + INIT_MOVE(M_F(name, _init_move)), \ + MOVE(API_0P(M_F(name, _move))), \ + SWAP(M_F(name, _swap)), \ + NAME(name), TYPE(M_F(name,_ct)), GENTYPE(struct M_F(name,_s)*), \ + SUBTYPE(M_F(name, _subtype_ct)), \ + EMPTY_P(M_F(name,_empty_p)), \ + GET_SIZE(M_F(name, _size)), \ + IT_TYPE(M_F(name, _it_ct)), \ + IT_FIRST(M_F(name,_it)), \ + IT_SET(M_F(name,_it_set)), \ + IT_LAST(M_F(name,_it_last)), \ + IT_END(M_F(name,_it_end)), \ + IT_END_P(M_F(name,_end_p)), \ + IT_LAST_P(M_F(name,_last_p)), \ + IT_EQUAL_P(M_F(name,_it_equal_p)), \ + IT_NEXT(M_F(name,_next)), \ + IT_PREVIOUS(M_F(name,_previous)), \ + IT_CREF(M_F(name,_cref)), \ + IT_REMOVE(M_F(name,_remove)), \ + RESET(API_0P(M_F(name,_reset))), \ + PUSH(API_0P(M_F(name,_push))), \ + GET_MIN(M_F(name,_min)), \ + GET_MAX(M_F(name,_max)), \ + M_IF_METHOD(GET_STR, oplist)(GET_STR(API_0P(M_F(name, _get_str))),), \ + M_IF_METHOD(PARSE_STR, oplist)(PARSE_STR(API_0P(M_F(name, _parse_str))),), \ + M_IF_METHOD(OUT_STR, oplist)(OUT_STR(M_F(name, _out_str)),), \ + M_IF_METHOD(IN_STR, oplist)(IN_STR(API_0P(M_F(name, _in_str))),), \ + M_IF_METHOD(OUT_SERIAL, oplist)(OUT_SERIAL(API_0P(M_F(name, _out_serial))),), \ + M_IF_METHOD(IN_SERIAL, oplist)(IN_SERIAL(API_0P(M_F(name, _in_serial))),), \ + M_IF_METHOD(EQUAL, oplist)(EQUAL(M_F(name, _equal_p)),), \ + M_IF_METHOD(HASH, oplist)(HASH(M_F(name, _hash)),) \ + ) +#endif /********************************** INTERNAL *********************************/ diff --git a/m-tuple.h b/m-tuple.h index 692df1b1..d9b97b51 100644 --- a/m-tuple.h +++ b/m-tuple.h @@ -746,6 +746,7 @@ namespace m_lib { ((M_LIB_ERROR(ONE_ARGUMENT_OF_M_TUPL3_OPLIST_IS_NOT_AN_OPLIST, name, __VA_ARGS__))) /* Define the TUPLE oplist */ +#ifndef M_USE_POOL #define M_TUPL3_OPLIST_P3(name, ...) \ (M_IF_METHOD_ALL(INIT, __VA_ARGS__)(INIT(M_F(name,_init)),), \ INIT_SET(M_F(name, _init_set)), \ @@ -770,6 +771,31 @@ namespace m_lib { M_IF_METHOD_ALL(RESET, __VA_ARGS__)(RESET(M_F(name, _reset)),), \ EMPLACE_TYPE( ( M_REDUCE2(M_TUPL3_OPLIST_SUBTYPE, M_ID, name, M_SEQ(1, M_NARGS(__VA_ARGS__))) ) ) \ ) +#else +#define M_TUPL3_OPLIST_P3(name, ...) \ + (M_IF_METHOD_ALL(INIT, __VA_ARGS__)(API_0P(INIT(M_F(name,_init))),), \ + INIT_SET(API_0P(M_F(name, _init_set))), \ + INIT_WITH(API_1(M_TUPL3_INIT_WITH)), \ + SET(API_0P(M_F(name,_set))), \ + CLEAR(API_0P(M_F(name, _clear))), \ + NAME(name), TYPE(M_F(name,_ct)), GENTYPE(struct M_F(name,_s)*), \ + OPLIST( (__VA_ARGS__) ), \ + M_IF_METHOD_ALL(CMP, __VA_ARGS__)(CMP(M_F(name, _cmp)),), \ + M_IF_METHOD_ALL(HASH, __VA_ARGS__)(HASH(M_F(name, _hash)),), \ + M_IF_METHOD_ALL(EQUAL, __VA_ARGS__)(EQUAL(M_F(name, _equal_p)),), \ + M_IF_METHOD_ALL(GET_STR, __VA_ARGS__)(GET_STR(API_0P(M_F(name, _get_str))),), \ + M_IF_METHOD_ALL(PARSE_STR, __VA_ARGS__)(PARSE_STR(API_0P(M_F(name, _parse_str))),), \ + M_IF_METHOD_ALL(IN_STR, __VA_ARGS__)(IN_STR(API_0P(M_F(name, _in_str))),), \ + M_IF_METHOD_ALL(OUT_STR, __VA_ARGS__)(OUT_STR(M_F(name, _out_str)),), \ + M_IF_METHOD_ALL(IN_SERIAL, __VA_ARGS__)(IN_SERIAL(API_0P(M_F(name, _in_serial))),), \ + M_IF_METHOD_ALL(OUT_SERIAL, __VA_ARGS__)(OUT_SERIAL(API_0P(M_F(name, _out_serial))),), \ + M_IF_METHOD_ALL(INIT_MOVE, __VA_ARGS__)(INIT_MOVE(M_F(name, _init_move)),), \ + M_IF_METHOD_ALL(MOVE, __VA_ARGS__)(MOVE(API_0P(M_F(name, _move))),), \ + M_IF_METHOD_ALL(SWAP, __VA_ARGS__)(SWAP(M_F(name, _swap)),), \ + M_IF_METHOD_ALL(RESET, __VA_ARGS__)(RESET(API_0P(M_F(name, _reset))),), \ + EMPLACE_TYPE( ( M_REDUCE2(M_TUPL3_OPLIST_SUBTYPE, M_ID, name, M_SEQ(1, M_NARGS(__VA_ARGS__))) ) ) \ + ) +#endif /* Support for EMPLACE_TYPE in OPLIST. It refers the created internal type alias */ #define M_TUPL3_OPLIST_SUBTYPE(name, num) \ diff --git a/m-variant.h b/m-variant.h index 37c20bce..506a6046 100644 --- a/m-variant.h +++ b/m-variant.h @@ -775,6 +775,7 @@ M_INLINE void \ ((M_LIB_ERROR(ONE_ARGUMENT_OF_VARIANT_OPLIST_IS_NOT_AN_OPLIST, name, __VA_ARGS__))) /* Define the oplist */ +#ifndef M_USE_POOL #define M_VAR1ANT_OPLIST_P3(name, ...) \ (INIT(M_F(name,_init)), \ INIT_SET(M_F(name, _init_set)), \ @@ -799,6 +800,31 @@ M_INLINE void \ M_IF_METHOD_ALL(SWAP, __VA_ARGS__)(SWAP(M_F(name, _swap)),), \ M_IF_METHOD_ALL(FIELD, __VA_ARGS__)(M_VAR1ANT_OPLIST_EMPLACE_TYPE,M_EAT)(name, __VA_ARGS__), \ ) +#else +#define M_VAR1ANT_OPLIST_P3(name, ...) \ + (INIT(M_F(name,_init)), \ + INIT_SET(API_0P(M_F(name, _init_set))), \ + SET(API_0P(M_F(name,_set))), \ + CLEAR(API_0P(M_F(name, _clear))), \ + RESET(API_0P(M_F(name, _reset))), \ + NAME(name), TYPE(M_F(name,_ct)), GENTYPE(struct M_F(name,_s)*), \ + EMPTY_P(M_F(name,_empty_p)), \ + SIZE( M_NARGS(__VA_ARGS__) ), \ + INIT_WITH( API_1(M_VAR1ANT_INIT_WITH) ), \ + M_IF_METHOD_ALL(HASH, __VA_ARGS__)(HASH(M_F(name, _hash)),), \ + M_IF_METHOD_ALL(EQUAL, __VA_ARGS__)(EQUAL(M_F(name, _equal_p)),), \ + M_IF_METHOD_ALL(GET_STR, __VA_ARGS__)(GET_STR(API_0P(M_F(name, _get_str))),), \ + M_IF_METHOD2_ALL(PARSE_STR, INIT, __VA_ARGS__)(PARSE_STR(API_0P(M_F(name, _parse_str))),), \ + M_IF_METHOD2_ALL(IN_STR, INIT, __VA_ARGS__)(IN_STR(API_0P(M_F(name, _in_str))),), \ + M_IF_METHOD_ALL(OUT_STR, __VA_ARGS__)(OUT_STR(M_F(name, _out_str)),), \ + M_IF_METHOD2_ALL(IN_SERIAL, INIT, __VA_ARGS__)(IN_SERIAL(API_0P(M_F(name, _in_serial))),), \ + M_IF_METHOD_ALL(OUT_SERIAL, __VA_ARGS__)(OUT_SERIAL(API_0P(M_F(name, _out_serial))),), \ + M_IF_METHOD_ALL(INIT_MOVE, __VA_ARGS__)(INIT_MOVE(M_F(name, _init_move)),), \ + M_IF_METHOD_ALL(INIT_MOVE, __VA_ARGS__)(MOVE(API_0P(M_F(name, _move))),), \ + M_IF_METHOD_ALL(SWAP, __VA_ARGS__)(SWAP(M_F(name, _swap)),), \ + M_IF_METHOD_ALL(FIELD, __VA_ARGS__)(M_VAR1ANT_OPLIST_EMPLACE_TYPE,M_EAT)(name, __VA_ARGS__), \ + ) +#endif /* Expand to an EMPLACE_TYPE compatible with OPLIST definition (Use M_REDUCE2 which is already used by M_IF_METHOD_ALL)