Factorize code so that _DEF macros use _DEF_AS ones

This commit is contained in:
Patrick Pelissier committed 2021-02-07 23:04:59 +01:00
1 parent d12b1edc39
commit 25497bd96f
18 files changed
+61 -185

No files matched your search

+1 -5
View File
@@ -30,11 +30,7 @@
/* Define a dynamic array of the given type and its associated functions. /* Define a dynamic array of the given type and its associated functions.
USAGE: ARRAY_DEF(name, type [, oplist_of_the_type]) */ USAGE: ARRAY_DEF(name, type [, oplist_of_the_type]) */
#define ARRAY_DEF(name, ...) \ #define ARRAY_DEF(name, ...) \
M_BEGIN_PROTECTED_CODE \ ARRAY_DEF_AS(name, M_C(name,_t), M_C(name,_it_t), __VA_ARGS__)
ARRAYI_DEF_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \
((name, __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__)(), M_C(name,_t), M_C(name,_it_t) ), \
(name, __VA_ARGS__, M_C(name,_t), M_C(name,_it_t)))) \
M_END_PROTECTED_CODE
/* Define a dynamic array of the given type and its associated functions /* Define a dynamic array of the given type and its associated functions
+4 -20
View File
@@ -35,11 +35,7 @@
BPTREE_DEF2(name, N, key_t, value_t) BPTREE_DEF2(name, N, key_t, value_t)
*/ */
#define BPTREE_DEF2(name, N, key_type, ...) \ #define BPTREE_DEF2(name, N, key_type, ...) \
M_BEGIN_PROTECTED_CODE \ BPTREE_DEF2_AS(name, M_C(name,_t), M_C(name,_it_t), M_C(name, _itref_t), N, key_type, __VA_ARGS__)
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, 0, M_C(name, _t), M_C(name, _node_ct), M_C(name, _pit_ct), M_C(name, _it_t), M_C(name, _itref_t) ), \
(name, N, key_type, __VA_ARGS__, 1, 0, M_C(name, _t), M_C(name, _node_ct), M_C(name, _pit_ct), M_C(name, _it_t), M_C(name, _itref_t) ))) \
M_END_PROTECTED_CODE
/* Define a B+tree of size 'N' that maps a 'key' to a 'value' /* Define a B+tree of size 'N' that maps a 'key' to a 'value'
@@ -61,11 +57,7 @@
with its associated functions with its associated functions
USAGE: BPTREE_DEF(name, N, type, [, oplist_of_the_type]) */ USAGE: BPTREE_DEF(name, N, type, [, oplist_of_the_type]) */
#define BPTREE_DEF(name, N, ...) \ #define BPTREE_DEF(name, N, ...) \
M_BEGIN_PROTECTED_CODE \ BPTREE_DEF_AS(name, M_C(name,_t), M_C(name,_it_t), N, __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, 0, M_C(name, _t), M_C(name, _node_ct), M_C(name, _pit_ct), M_C(name, _it_t), M_C(name, _itref_t) ), \
(name, N, __VA_ARGS__, __VA_ARGS__, 0, 0, M_C(name, _t), M_C(name, _node_ct), M_C(name, _pit_ct), M_C(name, _it_t), M_C(name, _itref_t) ))) \
M_END_PROTECTED_CODE
/* Define a B+tree of a given type, of size N. /* Define a B+tree of a given type, of size N.
@@ -88,11 +80,7 @@
BPTREE_MULTI_DEF2(name, N, key_t, value_t) BPTREE_MULTI_DEF2(name, N, key_t, value_t)
*/ */
#define BPTREE_MULTI_DEF2(name, N, key_type, ...) \ #define BPTREE_MULTI_DEF2(name, N, key_type, ...) \
M_BEGIN_PROTECTED_CODE \ BPTREE_MULTI_DEF2_AS(name, M_C(name,_t), M_C(name,_it_t), M_C(name,_itref_t), N, key_type, __VA_ARGS__)
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, 1, M_C(name, _t), M_C(name, _node_ct), M_C(name, _pit_ct), M_C(name, _it_t), M_C(name, _itref_t) ), \
(name, N, key_type, __VA_ARGS__, 1, 1, M_C(name, _t), M_C(name, _node_ct), M_C(name, _pit_ct), M_C(name, _it_t), M_C(name, _itref_t) ))) \
M_END_PROTECTED_CODE
/* Define a B+tree of size 'N' that maps a 'key' to a 'value', /* Define a B+tree of size 'N' that maps a 'key' to a 'value',
@@ -116,11 +104,7 @@
with its associated functions with its associated functions
USAGE: BPTREE_MULTI_DEF(name, N, type, [, oplist_of_the_type]) */ USAGE: BPTREE_MULTI_DEF(name, N, type, [, oplist_of_the_type]) */
#define BPTREE_MULTI_DEF(name, N, ...) \ #define BPTREE_MULTI_DEF(name, N, ...) \
M_BEGIN_PROTECTED_CODE \ BPTREE_MULTI_DEF_AS(name, M_C(name,_t), M_C(name,_it_t), N, __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, 1, M_C(name, _t), M_C(name, _node_ct), M_C(name, _pit_ct), M_C(name, _it_t), M_C(name, _itref_t) ), \
(name, N, __VA_ARGS__, __VA_ARGS__, 0, 1, M_C(name, _t), M_C(name, _node_ct), M_C(name, _pit_ct), M_C(name, _it_t), M_C(name, _itref_t) ))) \
M_BEGIN_PROTECTED_CODE
/* Define a B+tree of a given type, of size N. /* Define a B+tree of a given type, of size N.
+3 -15
View File
@@ -54,11 +54,7 @@ typedef enum {
/* Define a lock based buffer. /* Define a lock based buffer.
USAGE: BUFFER_DEF(name, type, size_of_buffer_or_0, policy[, oplist]) */ USAGE: BUFFER_DEF(name, type, size_of_buffer_or_0, policy[, oplist]) */
#define BUFFER_DEF(name, type, m_size, ... ) \ #define BUFFER_DEF(name, type, m_size, ... ) \
M_BEGIN_PROTECTED_CODE \ BUFFER_DEF_AS(name, M_C(name, _t), type, m_size, __VA_ARGS__)
BUFFERI_DEF_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \
((name, type, m_size,__VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(type)(), M_C(name,_t)), \
(name, type, m_size,__VA_ARGS__, M_C(name,_t)))) \
M_END_PROTECTED_CODE
/* Define a lock based buffer /* Define a lock based buffer
@@ -85,11 +81,7 @@ typedef enum {
Size of created queue can only a power of 2. Size of created queue can only a power of 2.
*/ */
#define QUEUE_MPMC_DEF(name, type, ...) \ #define QUEUE_MPMC_DEF(name, type, ...) \
M_BEGIN_PROTECTED_CODE \ QUEUE_MPMC_DEF_AS(name, M_C(name,_t), type, __VA_ARGS__)
QUEUEI_MPMC_DEF_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \
((name, type, __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(type)(), M_C(name,_t)), \
(name, type, __VA_ARGS__, M_C(name,_t)))) \
M_END_PROTECTED_CODE
/* Define a nearly lock-free queue for Many Producer Many Consummer /* Define a nearly lock-free queue for Many Producer Many Consummer
@@ -110,11 +102,7 @@ typedef enum {
Size of created queue can only a power of 2. Size of created queue can only a power of 2.
*/ */
#define QUEUE_SPSC_DEF(name, type, ...) \ #define QUEUE_SPSC_DEF(name, type, ...) \
M_BEGIN_PROTECTED_CODE \ QUEUE_SPSC_DEF_AS(name, M_C(name, _t), type, __VA_ARGS__)
QUEUEI_SPSC_DEF_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \
((name, type, __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(type)(), M_C(name,_t)), \
(name, type, __VA_ARGS__, M_C(name,_t)))) \
M_END_PROTECTED_CODE
/* Define a wait-free queue for Single Producer Single Consummer /* Define a wait-free queue for Single Producer Single Consummer
+10 -18
View File
@@ -33,11 +33,7 @@
based on the given container. based on the given container.
USAGE: CONCURRENT_DEF(name, type [, oplist_of_the_type]) */ USAGE: CONCURRENT_DEF(name, type [, oplist_of_the_type]) */
#define CONCURRENT_DEF(name, ...) \ #define CONCURRENT_DEF(name, ...) \
M_BEGIN_PROTECTED_CODE \ CONCURRENT_DEF_AS(name, M_C(name,_t), __VA_ARGS__)
CONCURRENTI_DEF_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \
((name, __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__)(), M_C(name,_t) ), \
(name, __VA_ARGS__, M_C(name,_t) ))) \
M_END_PROTECTED_CODE
/* Define a protected concurrent container and its associated functions /* Define a protected concurrent container and its associated functions
@@ -51,24 +47,12 @@
M_END_PROTECTED_CODE M_END_PROTECTED_CODE
/* Define the oplist of a protected concurrent container given its name and its oplist.
USAGE: CONCURRENT_OPLIST(name[, oplist of the type]) */
#define CONCURRENT_OPLIST(...) \
CONCURRENTI_OPLIST_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \
((__VA_ARGS__, M_DEFAULT_OPLIST), \
(__VA_ARGS__ )))
/* Define a protected concurrent container and its associated functions /* Define a protected concurrent container and its associated functions
based on its given container. Operations that perform only read of the container based on its given container. Operations that perform only read of the container
can be done in parallel. can be done in parallel.
USAGE: CONCURRENT_RP_DEF(name, type [, oplist_of_the_type]) */ USAGE: CONCURRENT_RP_DEF(name, type [, oplist_of_the_type]) */
#define CONCURRENT_RP_DEF(name, ...) \ #define CONCURRENT_RP_DEF(name, ...) \
M_BEGIN_PROTECTED_CODE \ CONCURRENT_RP_DEF_AS(name, M_C(name,_t), __VA_ARGS__)
CONCURRENTI_RP_DEF_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \
((name, __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__)(), M_C(name,_t) ), \
(name, __VA_ARGS__, M_C(name,_t) ))) \
M_END_PROTECTED_CODE
/* Define a protected concurrent container and its associated functions /* Define a protected concurrent container and its associated functions
@@ -84,6 +68,14 @@
M_END_PROTECTED_CODE M_END_PROTECTED_CODE
/* Define the oplist of a protected concurrent container given its name and its oplist.
USAGE: CONCURRENT_OPLIST(name[, oplist of the type]) */
#define CONCURRENT_OPLIST(...) \
CONCURRENTI_OPLIST_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \
((__VA_ARGS__, M_DEFAULT_OPLIST), \
(__VA_ARGS__ )))
/********************************** INTERNAL ************************************/ /********************************** INTERNAL ************************************/
/* Deferred evaluation for the oplist definition, /* Deferred evaluation for the oplist definition,
+1 -5
View File
@@ -30,11 +30,7 @@
/* Define a deque of a given type and its associated functions. /* Define a deque of a given type and its associated functions.
USAGE: DEQUE_DEF(name, type [, oplist_of_the_type]) */ USAGE: DEQUE_DEF(name, type [, oplist_of_the_type]) */
#define DEQUE_DEF(name, ...) \ #define DEQUE_DEF(name, ...) \
M_BEGIN_PROTECTED_CODE \ DEQUE_DEF_AS(name, M_C(name,_t), M_C(name,_it_t), __VA_ARGS__)
DEQUEI_DEF_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \
((name, __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__)(), M_C(name,_t), M_C(name,_it_t), M_C(name, _node_ct) ), \
(name, __VA_ARGS__, M_C(name,_t), M_C(name,_it_t), M_C(name, _node_ct)))) \
M_END_PROTECTED_CODE
/* Define a deque of a given type and its associated functions. /* Define a deque of a given type and its associated functions.
+24 -44
View File
@@ -37,11 +37,7 @@
DICT_DEF2(name, key_type, value_type) DICT_DEF2(name, key_type, value_type)
*/ */
#define DICT_DEF2(name, key_type, ...) \ #define DICT_DEF2(name, key_type, ...) \
M_BEGIN_PROTECTED_CODE \ DICT_DEF2_AS(name, M_C(name,_t), M_C(name,_it_t), M_C(name,_itref_t), key_type, __VA_ARGS__)
DICTI_DEF2_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \
((name, key_type, M_GLOBAL_OPLIST_OR_DEF(key_type)(), __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__)(),M_C(name, _t), M_C(name, _it_t), M_C(name, _itref_t) ), \
(name, key_type, __VA_ARGS__,M_C(name, _t), M_C(name, _it_t), M_C(name, _itref_t) ))) \
M_END_PROTECTED_CODE
/* Define a dictionary associating the key key_type to the value value_type and its associated functions. /* Define a dictionary associating the key key_type to the value value_type and its associated functions.
@@ -51,7 +47,7 @@
OR OR
DICT_DEF2_AS(name, name_t, it_t, itref_t, key_type, value_type) DICT_DEF2_AS(name, name_t, it_t, itref_t, key_type, value_type)
*/ */
#define DICT_DEF2_AS(name, name_it, it_t, itref_t, key_type, ...) \ #define DICT_DEF2_AS(name, name_t, it_t, itref_t, key_type, ...) \
M_BEGIN_PROTECTED_CODE \ M_BEGIN_PROTECTED_CODE \
DICTI_DEF2_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \ DICTI_DEF2_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \
((name, key_type, M_GLOBAL_OPLIST_OR_DEF(key_type)(), __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__)(), name_t, it_t, itref_t ), \ ((name, key_type, M_GLOBAL_OPLIST_OR_DEF(key_type)(), __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__)(), name_t, it_t, itref_t ), \
@@ -68,11 +64,7 @@
DICT_STOREHASH_DEF2(name, key_type[, key_oplist], value_type[, value_oplist]) DICT_STOREHASH_DEF2(name, key_type[, key_oplist], value_type[, value_oplist])
*/ */
#define DICT_STOREHASH_DEF2(name, key_type, ...) \ #define DICT_STOREHASH_DEF2(name, key_type, ...) \
M_BEGIN_PROTECTED_CODE \ DICT_STOREHASH_DEF2_AS(name, M_C(name,_t), M_C(name,_it_t), M_C(name,_itref_t), key_type, __VA_ARGS__)
DICTI_SHASH_DEF2_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \
((name, key_type, M_GLOBAL_OPLIST_OR_DEF(key_type)(), __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__)(),M_C(name, _t), M_C(name, _it_t), M_C(name, _itref_t) ), \
(name, key_type, __VA_ARGS__,M_C(name, _t), M_C(name, _it_t), M_C(name, _itref_t) ))) \
M_END_PROTECTED_CODE
/* Define a dictionary asssociating the key key_type to the value value_type and its associated functions. /* Define a dictionary asssociating the key key_type to the value value_type and its associated functions.
@@ -80,15 +72,15 @@
It stores the computed hash value, avoiding the need of recomputing it but increasing memory It stores the computed hash value, avoiding the need of recomputing it but increasing memory
consumption. consumption.
USAGE: USAGE:
DICT_STOREHASH_DEF2_AS(name, name_it, it_t, itref_t, key_type[, key_oplist], value_type[, value_oplist]) DICT_STOREHASH_DEF2_AS(name, name_t, it_t, itref_t, key_type[, key_oplist], value_type[, value_oplist])
OR OR
DICT_STOREHASH_DEF2_AS(name, name_it, it_t, itref_t, key_type[, key_oplist], value_type[, value_oplist]) DICT_STOREHASH_DEF2_AS(name, name_t, it_t, itref_t, key_type[, key_oplist], value_type[, value_oplist])
*/ */
#define DICT_STOREHASH_DEF2_AS(name, name_it, it_t, itref_t, key_type, ...) \ #define DICT_STOREHASH_DEF2_AS(name, name_t, it_t, itref_t, key_type, ...) \
M_BEGIN_PROTECTED_CODE \ M_BEGIN_PROTECTED_CODE \
DICTI_SHASH_DEF2_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \ DICTI_SHASH_DEF2_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \
((name, key_type, M_GLOBAL_OPLIST_OR_DEF(key_type)(), __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__)(), name_it, it_t, itref_t ), \ ((name, key_type, M_GLOBAL_OPLIST_OR_DEF(key_type)(), __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__)(), name_t, it_t, itref_t ), \
(name, key_type, __VA_ARGS__, name_it, it_t, itref_t ))) \ (name, key_type, __VA_ARGS__, name_t, it_t, itref_t ))) \
M_END_PROTECTED_CODE M_END_PROTECTED_CODE
@@ -101,11 +93,7 @@
DICT_OA_DEF2(name, key_type, value_type) DICT_OA_DEF2(name, key_type, value_type)
*/ */
#define DICT_OA_DEF2(name, key_type, ...) \ #define DICT_OA_DEF2(name, key_type, ...) \
M_BEGIN_PROTECTED_CODE \ DICT_OA_DEF2_AS(name, M_C(name,_t), M_C(name,_it_t), M_C(name,_itref_t), key_type, __VA_ARGS__)
DICTI_OA_DEF_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \
((name, key_type, M_GLOBAL_OPLIST_OR_DEF(key_type)(), __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__)(),M_C(name, _t), M_C(name, _it_t), M_C(name, _itref_t) ), \
(name, key_type, __VA_ARGS__,M_C(name, _t), M_C(name, _it_t), M_C(name, _itref_t) ))) \
M_END_PROTECTED_CODE
/* Define a dictionary associating the key key_type to the value value_type /* Define a dictionary associating the key key_type to the value value_type
@@ -113,15 +101,15 @@
as the given name name_t with its associated functions. as the given name name_t with its associated functions.
KEY_OPLIST needs the operators OOR_EQUAL & OOR_SET. KEY_OPLIST needs the operators OOR_EQUAL & OOR_SET.
USAGE: USAGE:
DICT_OA_DEF2_AS(name, name_it, it_t, itref_t, key_type, key_oplist, value_type, value_oplist) DICT_OA_DEF2_AS(name, name_t, it_t, itref_t, key_type, key_oplist, value_type, value_oplist)
OR OR
DICT_OA_DEF2_AS(name, name_it, it_t, itref_t, key_type, value_type) DICT_OA_DEF2_AS(name, name_t, it_t, itref_t, key_type, value_type)
*/ */
#define DICT_OA_DEF2_AS(name, name_it, it_t, itref_t, key_type, ...) \ #define DICT_OA_DEF2_AS(name, name_t, it_t, itref_t, key_type, ...) \
M_BEGIN_PROTECTED_CODE \ M_BEGIN_PROTECTED_CODE \
DICTI_OA_DEF_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \ DICTI_OA_DEF_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \
((name, key_type, M_GLOBAL_OPLIST_OR_DEF(key_type)(), __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__)(), name_it, it_t, itref_t ), \ ((name, key_type, M_GLOBAL_OPLIST_OR_DEF(key_type)(), __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__)(), name_t, it_t, itref_t ), \
(name, key_type, __VA_ARGS__, name_it, it_t, itref_t ))) \ (name, key_type, __VA_ARGS__, name_t, it_t, itref_t ))) \
M_END_PROTECTED_CODE M_END_PROTECTED_CODE
@@ -130,23 +118,19 @@
USAGE: DICT_SET_DEF(name, key_type[, key_oplist]) USAGE: DICT_SET_DEF(name, key_type[, key_oplist])
*/ */
#define DICT_SET_DEF(name, ...) \ #define DICT_SET_DEF(name, ...) \
M_BEGIN_PROTECTED_CODE \ DICT_SET_DEF_AS(name, M_C(name,_t), M_C(name,_it_t), __VA_ARGS__)
DICTI_SET_DEF_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \
((name, __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__)(),M_C(name, _t), M_C(name, _it_t), M_C(name, _itref_t)), \
(name, __VA_ARGS__,M_C(name, _t), M_C(name, _it_t), M_C(name, _itref_t)))) \
M_END_PROTECTED_CODE
/* Define a set of the key key_type and its associated functions. /* Define a set of the key key_type and its associated functions.
as the given name name_t with its associated functions. as the given name name_t with its associated functions.
The set is unordered. The set is unordered.
USAGE: DICT_SET_DEF_AS(name, name_it, it_t, key_type[, key_oplist]) USAGE: DICT_SET_DEF_AS(name, name_t, it_t, key_type[, key_oplist])
*/ */
#define DICT_SET_DEF_AS(name, name_it, it_t, ...) \ #define DICT_SET_DEF_AS(name, name_t, it_t, ...) \
M_BEGIN_PROTECTED_CODE \ M_BEGIN_PROTECTED_CODE \
DICTI_SET_DEF_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \ DICTI_SET_DEF_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \
((name, __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__)(), name_it, it_t, M_C(name, _itref_ct) ), \ ((name, __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__)(), name_t, it_t, M_C(name, _itref_ct) ), \
(name, __VA_ARGS__, name_it, it_t, M_C(name, _itref_ct) ))) \ (name, __VA_ARGS__, name_t, it_t, M_C(name, _itref_ct) ))) \
M_END_PROTECTED_CODE M_END_PROTECTED_CODE
@@ -156,24 +140,20 @@
USAGE: DICT_OASET_DEF(name, key_type[, key_oplist]) USAGE: DICT_OASET_DEF(name, key_type[, key_oplist])
*/ */
#define DICT_OASET_DEF(name, ...) \ #define DICT_OASET_DEF(name, ...) \
M_BEGIN_PROTECTED_CODE \ DICT_OASET_DEF_AS(name, M_C(name,_t), M_C(name,_it_t), __VA_ARGS__)
DICTI_OASET_DEF_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \
((name, __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__)(), M_C(name, _t), M_C(name, _it_t), M_C(name, _itref_t) ), \
(name, __VA_ARGS__,M_C(name, _t), M_C(name, _it_t), M_C(name, _itref_t) ))) \
M_END_PROTECTED_CODE
/* Define a set of the key key_type /* Define a set of the key key_type
with an Open Addressing implementation and its associated functions. with an Open Addressing implementation and its associated functions.
as the given name name_t with its associated functions. as the given name name_t with its associated functions.
The set is unordered. The set is unordered.
USAGE: DICT_OASET_DEF_AS(name, name_it, it_t, key_type[, key_oplist]) USAGE: DICT_OASET_DEF_AS(name, name_t, it_t, key_type[, key_oplist])
*/ */
#define DICT_OASET_DEF_AS(name, name_it, it_t, ...) \ #define DICT_OASET_DEF_AS(name, name_t, it_t, ...) \
M_BEGIN_PROTECTED_CODE \ M_BEGIN_PROTECTED_CODE \
DICTI_OASET_DEF_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \ DICTI_OASET_DEF_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \
((name, __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__)(), name_it, it_t, M_C(name, _itref_ct) ), \ ((name, __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__)(), name_t, it_t, M_C(name, _itref_ct) ), \
(name, __VA_ARGS__, name_it, it_t, M_C(name, _itref_ct) ))) \ (name, __VA_ARGS__, name_t, it_t, M_C(name, _itref_ct) ))) \
M_END_PROTECTED_CODE M_END_PROTECTED_CODE
+2 -6
View File
@@ -33,9 +33,7 @@
* FUNC_OBJ_ITF_DEF(name, retcode type, type of param1, type of param 2, ...) * FUNC_OBJ_ITF_DEF(name, retcode type, type of param1, type of param 2, ...)
*/ */
#define FUNC_OBJ_ITF_DEF(name, ...) \ #define FUNC_OBJ_ITF_DEF(name, ...) \
M_BEGIN_PROTECTED_CODE \ FUNC_OBJ_ITF_DEF_AS(name, M_C(name,_t), __VA_ARGS__)
M_IF_NARGS_EQ1(__VA_ARGS__)(FUNCOBJI_ITF_NO_PARAM_DEF, FUNCOBJI_ITF_PARAM_DEF)(name, M_C(name, _t), __VA_ARGS__) \
M_END_PROTECTED_CODE
/* Define a function object interface of name 'name' /* Define a function object interface of name 'name'
@@ -68,9 +66,7 @@
* FUNC_OBJ_INS_DEF(name, base_name, (param1, ...), { return param1 * self->member1 }, (member1, int), ...) * FUNC_OBJ_INS_DEF(name, base_name, (param1, ...), { return param1 * self->member1 }, (member1, int), ...)
*/ */
#define FUNC_OBJ_INS_DEF(name, base_name, param_list, ...) \ #define FUNC_OBJ_INS_DEF(name, base_name, param_list, ...) \
M_BEGIN_PROTECTED_CODE \ FUNC_OBJ_INS_DEF_AS(name, M_C(name,_t), base_name, param_list, __VA_ARGS__)
M_IF_NARGS_EQ1(__VA_ARGS__)(FUNCOBJI_INS_NO_ATTR_DEF, FUNCOBJI_INS_ATTR_DEF)(name, M_C(name, _t), base_name, param_list, __VA_ARGS__) \
M_END_PROTECTED_CODE
/* Define a function object instance of name 'name' based on the interface 'base_name' /* Define a function object instance of name 'name' based on the interface 'base_name'
+1 -5
View File
@@ -47,11 +47,7 @@
USAGE: USAGE:
ILIST_DEF(name, type [, oplist_of_the_type]) */ ILIST_DEF(name, type [, oplist_of_the_type]) */
#define ILIST_DEF(name, ...) \ #define ILIST_DEF(name, ...) \
M_BEGIN_PROTECTED_CODE \ ILIST_DEF_AS(name, M_C(name,_t), M_C(name,_it_t), __VA_ARGS__)
ILISTI_DEF_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \
((name, __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__)(), M_C(name, _t), M_C(name, _it_t) ), \
(name, __VA_ARGS__, M_C(name, _t), M_C(name, _it_t) ))) \
M_END_PROTECTED_CODE
/* Define a doubly-linked intrusive list of a given type /* Define a doubly-linked intrusive list of a given type
+1 -5
View File
@@ -58,11 +58,7 @@ M_BEGIN_PROTECTED_CODE
/* Define the intrusive shared pointer type and its static inline functions. /* Define the intrusive shared pointer type and its static inline functions.
USAGE: ISHARED_PTR_DEF(name, type, [, oplist]) */ USAGE: ISHARED_PTR_DEF(name, type, [, oplist]) */
#define ISHARED_PTR_DEF(name, ...) \ #define ISHARED_PTR_DEF(name, ...) \
M_BEGIN_PROTECTED_CODE \ ISHARED_PTR_DEF_AS(name, M_C(name,_t), __VA_ARGS__)
ISHAREDI_PTR_DEF_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \
((name, __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__)(), M_C(name, _t) ), \
(name, __VA_ARGS__ , M_C(name, _t) ))) \
M_END_PROTECTED_CODE
/* Define the intrusive shared pointer type and its static inline functions /* Define the intrusive shared pointer type and its static inline functions
+2 -10
View File
@@ -30,11 +30,7 @@
/* Define a singly linked list of a given type. /* Define a singly linked list of a given type.
USAGE: LIST_DEF(name, type [, oplist_of_the_type]) */ USAGE: LIST_DEF(name, type [, oplist_of_the_type]) */
#define LIST_DEF(name, ...) \ #define LIST_DEF(name, ...) \
M_BEGIN_PROTECTED_CODE \ LIST_DEF_AS(name, M_C(name, _t), M_C(name, _it_t), __VA_ARGS__)
LISTI_DEF_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \
((name, __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__)(), M_C(name,_t), M_C(name, _it_t) ), \
(name, __VA_ARGS__, M_C(name,_t), M_C(name, _it_t) ))) \
M_END_PROTECTED_CODE
/* Define a singly linked list of a given type /* Define a singly linked list of a given type
@@ -51,11 +47,7 @@
/* Define a singly linked list of a given type allowing both push. /* Define a singly linked list of a given type allowing both push.
USAGE: LIST_DUAL_PUSH_DEF_AS(name, name_t, type [, oplist_of_the_type]) */ USAGE: LIST_DUAL_PUSH_DEF_AS(name, name_t, type [, oplist_of_the_type]) */
#define LIST_DUAL_PUSH_DEF(name, ...) \ #define LIST_DUAL_PUSH_DEF(name, ...) \
M_BEGIN_PROTECTED_CODE \ LIST_DUAL_PUSH_DEF_AS(name, M_C(name,_t), M_C(name, _it_t), __VA_ARGS__)
LISTI_DUAL_PUSH_DEF_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \
((name, __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__)(), M_C(name,_t), M_C(name, _it_t) ), \
(name, __VA_ARGS__, M_C(name,_t), M_C(name, _it_t) ))) \
M_END_PROTECTED_CODE
/* Define a singly linked list of a given type allowing both push. /* Define a singly linked list of a given type allowing both push.
+1 -3
View File
@@ -40,9 +40,7 @@
NOTE: Can not use m-list since it may be expanded from LIST_DEF NOTE: Can not use m-list since it may be expanded from LIST_DEF
*/ */
#define MEMPOOL_DEF(name, type) \ #define MEMPOOL_DEF(name, type) \
M_BEGIN_PROTECTED_CODE \ MEMPOOL_DEF_AS(name, M_C(name,_t), type)
MEMPOOL_DEF_P2(name, type, M_C(name, _t) ) \
M_END_PROTECTED_CODE
/* Fast Fixed Size thread unsafe allocator based on memory region. /* Fast Fixed Size thread unsafe allocator based on memory region.
+1 -5
View File
@@ -33,11 +33,7 @@
/* Define a prioqueue of a given type and its associated functions. /* Define a prioqueue of a given type and its associated functions.
USAGE: PRIOQUEUE_DEF(name, type [, oplist_of_the_type]) */ USAGE: PRIOQUEUE_DEF(name, type [, oplist_of_the_type]) */
#define PRIOQUEUE_DEF(name, ...) \ #define PRIOQUEUE_DEF(name, ...) \
M_BEGIN_PROTECTED_CODE \ PRIOQUEUE_DEF_AS(name, M_C(name,_t), M_C(name,_it_t), __VA_ARGS__)
PRIOQUEUEI_DEF_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \
((name, __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__)(), M_C(name,_t), M_C(name,_it_t) ), \
(name, __VA_ARGS__, M_C(name,_t), M_C(name,_it_t)))) \
M_END_PROTECTED_CODE
/* Define a prioqueue of a given type and its associated functions. /* Define a prioqueue of a given type and its associated functions.
+1 -7
View File
@@ -30,13 +30,7 @@
/* Define a Red/Black binary tree of a given type. /* Define a Red/Black binary tree of a given type.
USAGE: RBTREE_DEF(name, type [, oplist_of_the_type]) */ USAGE: RBTREE_DEF(name, type [, oplist_of_the_type]) */
#define RBTREE_DEF(name, ...) \ #define RBTREE_DEF(name, ...) \
M_BEGIN_PROTECTED_CODE \ RBTREE_DEF_AS(name, M_C(name,_t), M_C(name,_it_t), __VA_ARGS__)
RBTREEI_DEF_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \
((name, __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__)(), \
M_C(name, _t), M_C(name, _node_ct), M_C(name, _it_t)), \
(name, __VA_ARGS__ , \
M_C(name, _t), M_C(name, _node_ct), M_C(name, _it_t)))) \
M_END_PROTECTED_CODE
/* Define a Red/Black binary tree of a given type /* Define a Red/Black binary tree of a given type
+3 -15
View File
@@ -42,11 +42,7 @@ M_BEGIN_PROTECTED_CODE
/* Define shared pointer and its function. /* Define shared pointer and its function.
USAGE: SHARED_PTR_DEF(name, type, [, oplist]) */ USAGE: SHARED_PTR_DEF(name, type, [, oplist]) */
#define SHARED_PTR_DEF(name, ...) \ #define SHARED_PTR_DEF(name, ...) \
M_BEGIN_PROTECTED_CODE \ SHARED_PTR_DEF_AS(name, M_C(name,_t), __VA_ARGS__)
SHAREDI_PTR_DEF_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \
((name, __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__)(), SHAREDI_ATOMIC_OPLIST, M_C(name, _t) ), \
(name, __VA_ARGS__ , SHAREDI_ATOMIC_OPLIST, M_C(name, _t) ))) \
M_END_PROTECTED_CODE
/* Define shared pointer and its function /* Define shared pointer and its function
@@ -63,11 +59,7 @@ M_BEGIN_PROTECTED_CODE
/* Define relaxed shared pointer and its function (thread unsafe). /* Define relaxed shared pointer and its function (thread unsafe).
USAGE: SHARED_PTR_RELAXED_DEF(name, type, [, oplist]) */ USAGE: SHARED_PTR_RELAXED_DEF(name, type, [, oplist]) */
#define SHARED_PTR_RELAXED_DEF(name, ...) \ #define SHARED_PTR_RELAXED_DEF(name, ...) \
M_BEGIN_PROTECTED_CODE \ SHARED_PTR_RELAXED_DEF_AS(name, M_C(name,_t), __VA_ARGS__)
SHAREDI_PTR_DEF_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \
((name, __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__)(), SHAREDI_INTEGER_OPLIST, M_C(name, _t) ), \
(name, __VA_ARGS__, SHAREDI_INTEGER_OPLIST, M_C(name, _t) ))) \
M_END_PROTECTED_CODE
/* Define relaxed shared pointer and its function (thread unsafe) /* Define relaxed shared pointer and its function (thread unsafe)
@@ -85,11 +77,7 @@ M_BEGIN_PROTECTED_CODE
This is a bounded pool of resource shared by multiple owners. This is a bounded pool of resource shared by multiple owners.
USAGE: SHARED_RESOURCE_DEF(name, type, [, oplist]) */ USAGE: SHARED_RESOURCE_DEF(name, type, [, oplist]) */
#define SHARED_RESOURCE_DEF(name, ...) \ #define SHARED_RESOURCE_DEF(name, ...) \
M_BEGIN_PROTECTED_CODE \ SHARED_RESOURCE_DEF_AS(name, M_C(name,_t), M_C(name,_it_t), __VA_ARGS__)
SHAREDI_RESOURCE_DEF_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \
((name, __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__)(), M_C(name, _t), M_C(name, _it_t) ), \
(name, __VA_ARGS__, M_C(name, _t), M_C(name, _it_t) ))) \
M_END_PROTECTED_CODE
/* Define shared resource and its function /* Define shared resource and its function
+3 -15
View File
@@ -34,11 +34,7 @@ M_BEGIN_PROTECTED_CODE
/* Define a Single Producer Single Consummer snapshot and its functions /* Define a Single Producer Single Consummer snapshot and its functions
USAGE: SNAPSHOT_SPSC_DEF(name, type[, oplist]) */ USAGE: SNAPSHOT_SPSC_DEF(name, type[, oplist]) */
#define SNAPSHOT_SPSC_DEF(name, ...) \ #define SNAPSHOT_SPSC_DEF(name, ...) \
M_BEGIN_PROTECTED_CODE \ SNAPSHOT_SPSC_DEF_AS(name, M_C(name,_t), __VA_ARGS__)
SNAPSHOTI_SPSC_DEF_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \
((name, __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__)(), M_C(name, _t) ), \
(name, __VA_ARGS__ , M_C(name, _t) ))) \
M_END_PROTECTED_CODE
/* Define a Single Producer Single Consummer snapshot and its functions /* Define a Single Producer Single Consummer snapshot and its functions
@@ -55,11 +51,7 @@ M_BEGIN_PROTECTED_CODE
/* Define a Single Producer Multiple Consummer snapshot and its functions /* Define a Single Producer Multiple Consummer snapshot and its functions
USAGE: SNAPSHOT_SPMC_DEF(name, type[, oplist]) */ USAGE: SNAPSHOT_SPMC_DEF(name, type[, oplist]) */
#define SNAPSHOT_SPMC_DEF(name, ...) \ #define SNAPSHOT_SPMC_DEF(name, ...) \
M_BEGIN_PROTECTED_CODE \ SNAPSHOT_SPMC_DEF_AS(name, M_C(name,_t), __VA_ARGS__)
SNAPSHOTI_SPMC_DEF_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \
((name, __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__)(), M_C(name, _t) ), \
(name, __VA_ARGS__ , M_C(name, _t) ))) \
M_END_PROTECTED_CODE
/* Define a Single Producer Multiple Consummer snapshot and its functions /* Define a Single Producer Multiple Consummer snapshot and its functions
@@ -76,11 +68,7 @@ M_BEGIN_PROTECTED_CODE
/* Define a Multiple Producer Multiple Consummer snapshot and its functions /* Define a Multiple Producer Multiple Consummer snapshot and its functions
USAGE: SNAPSHOT_MPMC_DEF(name, type[, oplist]) */ USAGE: SNAPSHOT_MPMC_DEF(name, type[, oplist]) */
#define SNAPSHOT_MPMC_DEF(name, ...) \ #define SNAPSHOT_MPMC_DEF(name, ...) \
M_BEGIN_PROTECTED_CODE \ SNAPSHOT_MPMC_DEF_AS(name, M_C(name,_t), __VA_ARGS__)
SNAPSHOTI_MPMC_DEF_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \
((name, __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__)(), M_C(name, _t) ), \
(name, __VA_ARGS__ , M_C(name, _t) ))) \
M_END_PROTECTED_CODE
/* Define a Multiple Producer Multiple Consummer snapshot and its functions /* Define a Multiple Producer Multiple Consummer snapshot and its functions
+1 -3
View File
@@ -33,9 +33,7 @@
USAGE: USAGE:
TUPLE_DEF2(name, [(field1, type1[, oplist1]), (field2, type2[, oplist2]), ...] ) */ TUPLE_DEF2(name, [(field1, type1[, oplist1]), (field2, type2[, oplist2]), ...] ) */
#define TUPLE_DEF2(name, ...) \ #define TUPLE_DEF2(name, ...) \
M_BEGIN_PROTECTED_CODE \ TUPLE_DEF2_AS(name, M_C(name,_t), __VA_ARGS__)
TUPLEI_DEF2_P1( (name, M_C(name, _t) TUPLEI_INJECT_GLOBAL(__VA_ARGS__)) ) \
M_END_PROTECTED_CODE
/* Define the tuple type and functions /* Define the tuple type and functions
+1 -3
View File
@@ -34,9 +34,7 @@
USAGE: USAGE:
VARIANT_DEF2(name, [(field1, type1, oplist1), (field2, type2, oplist2), ...] ) */ VARIANT_DEF2(name, [(field1, type1, oplist1), (field2, type2, oplist2), ...] ) */
#define VARIANT_DEF2(name, ...) \ #define VARIANT_DEF2(name, ...) \
M_BEGIN_PROTECTED_CODE \ VARIANT_DEF2_AS(name, M_C(name,_t), __VA_ARGS__)
VARIANTI_DEF2_P1( (name, M_C(name, _t) VARIANTI_INJECT_GLOBAL(__VA_ARGS__)) ) \
M_END_PROTECTED_CODE
/* Define the variant type and functions /* Define the variant type and functions
+1 -1
View File
@@ -562,7 +562,7 @@ test_multiset(void)
for(multiset_it_from(it, b, k); for(multiset_it_from(it, b, k);
multiset_it_while_p(it, k); multiset_it_while_p(it, k);
multiset_next(it)) { multiset_next(it)) {
const multiset_itref_t *ref = multiset_cref(it); const int *ref = multiset_cref(it);
assert(*ref == k); assert(*ref == k);
j++; j++;
} }