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) \
|
#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) )
|
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) \
|
#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) \
|
#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.
|
/* 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); \
|
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(ptr != NULL);
|
||||||
assert(testobj_cmp_ui(*ptr, 190) == 0);
|
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);
|
string_clear(s);
|
||||||
dict_mpz_clear(d);
|
dict_mpz_clear(d);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user