Factorize code so that _DEF macros use _DEF_AS ones
This commit is contained in:
1 parent
d12b1edc39
commit
25497bd96f
18 files changed
+61
-185
No files matched your search
@@ -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
@@ -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
@@ -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
@@ -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,
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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++;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user