X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/149933f19168c87b400c0e0e5583fbcef0859ce8..3318d4f4f09b51bc1158737c5cb0391df264d018:/src/xbt/dict_multi.c diff --git a/src/xbt/dict_multi.c b/src/xbt/dict_multi.c index 6db40206ca..dc3d196fc9 100644 --- a/src/xbt/dict_multi.c +++ b/src/xbt/dict_multi.c @@ -9,7 +9,7 @@ #include "dict_private.h" -XBT_LOG_NEW_DEFAULT_SUBCATEGORY(dict_multi,dict, "Dictionaries of multiple keys"); +XBT_LOG_NEW_DEFAULT_SUBCATEGORY(xbt_dict_multi,xbt_dict, "Dictionaries of multiple keys"); static void _free_dict(void*d) { VERB1("free dict %p",d); @@ -30,7 +30,7 @@ static void _free_dict(void*d) { void xbt_multidict_set_ext(xbt_dict_t mdict, xbt_dynar_t keys, xbt_dynar_t lens, - void *data, void_f_pvoid_t *free_ctn) { + void *data, void_f_pvoid_t free_ctn) { xbt_ex_t e; xbt_dict_t thislevel,nextlevel=NULL; @@ -58,14 +58,14 @@ xbt_multidict_set_ext(xbt_dict_t mdict, TRY { nextlevel = xbt_dict_get_ext(thislevel, thiskey, thislen); } CATCH(e) { - if (e.category == arg_error || e.category == mismatch_error) { - /* make sure the dict of next level exists */ - nextlevel=xbt_dict_new(); - VERB1("Create a dict (%p)",nextlevel); - xbt_dict_set_ext(thislevel, thiskey, thislen, nextlevel, &_free_dict); - } else { + if (e.category != not_found_error) RETHROW; - } + + /* make sure the dict of next level exists */ + xbt_ex_free(e); + nextlevel=xbt_dict_new(); + VERB1("Create a dict (%p)",nextlevel); + xbt_dict_set_ext(thislevel, thiskey, thislen, nextlevel, &_free_dict); } } @@ -85,22 +85,22 @@ xbt_multidict_set_ext(xbt_dict_t mdict, void xbt_multidict_set(xbt_dict_t mdict, xbt_dynar_t keys, - void *data, void_f_pvoid_t *free_ctn) { + void *data, void_f_pvoid_t free_ctn) { xbt_dynar_t lens = xbt_dynar_new(sizeof(unsigned long int),NULL); - int i; + unsigned long i; xbt_ex_t e; for (i = 0; i < xbt_dynar_length(keys); i++) { char *thiskey = xbt_dynar_get_as(keys, i, char*); unsigned long int thislen = (unsigned long int) strlen(thiskey); - DEBUG2("Push %ld as level %d length",thislen, i); + DEBUG2("Push %ld as level %lu length",thislen, i); xbt_dynar_push(lens,&thislen); } TRY { xbt_multidict_set_ext(mdict, keys, lens, data, free_ctn); } CLEANUP { - xbt_dynar_free(&lens); + xbt_dynar_free(&lens); } CATCH(e) { RETHROW; } @@ -154,7 +154,7 @@ xbt_multidict_get_ext(xbt_dict_t mdict, void * xbt_multidict_get(xbt_dict_t mdict, xbt_dynar_t keys) { xbt_dynar_t lens = xbt_dynar_new(sizeof(unsigned long int),NULL); - int i; + unsigned long i; void *res; for (i = 0; i < xbt_dynar_length(keys); i++) { @@ -182,7 +182,7 @@ xbt_multidict_get(xbt_dict_t mdict, xbt_dynar_t keys) { * Removing a non-existant key is ok. */ -xbt_error_t +void xbt_multidict_remove_ext(xbt_dict_t mdict, xbt_dynar_t keys, xbt_dynar_t lens) { xbt_dict_t thislevel,nextlevel=NULL; int i; @@ -217,23 +217,27 @@ xbt_multidict_remove_ext(xbt_dict_t mdict, xbt_dynar_t keys, xbt_dynar_t lens) { xbt_dynar_get_cpy(keys, i, &thiskey); xbt_dynar_get_cpy(lens, i, &thislen); - return xbt_dict_remove_ext(thislevel, thiskey, thislen); + xbt_dict_remove_ext(thislevel, thiskey, thislen); } -xbt_error_t +void xbt_multidict_remove(xbt_dict_t mdict, xbt_dynar_t keys) { - xbt_error_t errcode; + xbt_ex_t e; xbt_dynar_t lens = xbt_dynar_new(sizeof(unsigned long int),NULL); - int i; + unsigned long i; for (i = 0; i < xbt_dynar_length(keys); i++) { char *thiskey = xbt_dynar_get_as(keys, i, char*); unsigned long int thislen = strlen(thiskey); xbt_dynar_push(lens,&thislen); } - - errcode = xbt_multidict_remove_ext(mdict, keys, lens); - xbt_dynar_free(&lens); - return errcode; + + TRY { + xbt_multidict_remove_ext(mdict, keys, lens); + } CLEANUP { + xbt_dynar_free(&lens); + } CATCH(e) { + RETHROW; + } }