Add _get_emplace functions for associative array
This commit is contained in:
1 parent
c515da9f37
commit
4e4e21793c
2 files changed
+30
-2
No files matched your search
@@ -4652,9 +4652,11 @@ m_core_parse2_enum (const char str[], const char **endptr)
|
||||
#define M_EMPLACE_ASS_ARRAY_OR_QUEUE_DEF(isSet, name, name_t, key_oplist, val_oplist) \
|
||||
M_ID( M_C(M_EMPLACE_ASS_ARRAY_OR_QUEUE_DEF, isSet)(name, name_t, key_oplist, val_oplist) )
|
||||
#define M_EMPLACE_ASS_ARRAY_OR_QUEUE_DEF0(name, name_t, key_oplist, val_oplist) \
|
||||
M_EMPLACE_ASS_ARRAY_DEF(name, name_t, M_C(name, _emplace), key_oplist, val_oplist, M_EMPLACE_ASS_ARRA1_BOTH_GENE, M_EMPLACE_ASS_ARRA1_KEY_GENE, M_EMPLACE_ASS_ARRA1_VAL_GENE)
|
||||
M_EMPLACE_ASS_ARRAY_DEF(name, name_t, M_C(name, _emplace), key_oplist, val_oplist, M_EMPLACE_ASS_ARRA1_BOTH_GENE, M_EMPLACE_ASS_ARRA1_KEY_GENE, M_EMPLACE_ASS_ARRA1_VAL_GENE) \
|
||||
M_EMPLACE_QUEUE_DEF(name, name_t, M_C(name, _get_emplace), key_oplist, M_EMPLACE_GET_GENE)
|
||||
#define M_EMPLACE_ASS_ARRAY_OR_QUEUE_DEF1(name, name_t, key_oplist, val_oplist) \
|
||||
M_EMPLACE_QUEUE_DEF(name, name_t, M_C(name, _emplace), key_oplist, M_EMPLACE_QUEUE_GENE)
|
||||
M_EMPLACE_QUEUE_DEF(name, name_t, M_C(name, _emplace), key_oplist, M_EMPLACE_QUEUE_GENE) \
|
||||
M_EMPLACE_QUEUE_DEF(name, name_t, M_C(name, _get_emplace), key_oplist, M_EMPLACE_GET_GENE)
|
||||
|
||||
|
||||
/* Definition of the emplace_back function for associative arrays.
|
||||
@@ -4718,6 +4720,22 @@ m_core_parse2_enum (const char str[], const char **endptr)
|
||||
M_CALL_CLEAR(oplist, data); \
|
||||
}
|
||||
|
||||
/* Definition of the get_emplace function for set / map.
|
||||
It is defined here so that this definition is shared accross different
|
||||
kind of kind of queue.
|
||||
This definition is far from being efficient but works for the current interface.
|
||||
*/
|
||||
#define M_EMPLACE_GET_GENE(name, name_t, function_name, oplist, init_func, exp_emplace_type) \
|
||||
static inline M_C(name, _value_ct) * \
|
||||
function_name(name_t v \
|
||||
M_EMPLACE_LIST_TYPE_VAR(a, exp_emplace_type) ) \
|
||||
{ \
|
||||
M_GET_TYPE oplist data; \
|
||||
M_EMPLACE_CALL_FUNC(a, init_func, oplist, data, exp_emplace_type); \
|
||||
M_C(name, _value_ct) *ret = M_C(name, _get)(v, data); \
|
||||
M_CALL_CLEAR(oplist, data); \
|
||||
return ret; \
|
||||
}
|
||||
|
||||
|
||||
/************************************************************/
|
||||
|
||||
@@ -593,6 +593,16 @@ static void test_emplace (void)
|
||||
assert(ptr != NULL);
|
||||
assert(testobj_cmp_ui(*ptr, 190) == 0);
|
||||
|
||||
dict_mpz_emplace_key(d, "IT", *ptr);
|
||||
ptr = dict_mpz_get_emplace(d, "IT");
|
||||
assert(ptr != NULL);
|
||||
assert(testobj_cmp_ui(*ptr, 190) == 0);
|
||||
|
||||
dict_mpz_emplace_key_val_str(d, "SHE", "189");
|
||||
ptr = dict_mpz_get_emplace(d, "SHE");
|
||||
assert(ptr != NULL);
|
||||
assert(testobj_cmp_ui(*ptr, 189) == 0);
|
||||
|
||||
string_clear(s);
|
||||
dict_mpz_clear(d);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user