X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/0f5e8daaa6e9f74521068aa75837200bcd182ea6..5651e471a6df819cbeba59ba1875cbf163afc9e4:/src/xbt/dynar.c diff --git a/src/xbt/dynar.c b/src/xbt/dynar.c index bead04b141..f4f1cdd26d 100644 --- a/src/xbt/dynar.c +++ b/src/xbt/dynar.c @@ -459,11 +459,10 @@ static XBT_INLINE void *_xbt_dynar_insert_at_ptr(xbt_dynar_t const dynar, void *res; unsigned long old_used; unsigned long new_used; - unsigned long nb_shift; + long nb_shift; _sanity_check_dynar(dynar); _sanity_check_idx(idx); - _check_sloppy_inbound_idx(dynar, idx); old_used = dynar->used; new_used = old_used + 1; @@ -472,9 +471,10 @@ static XBT_INLINE void *_xbt_dynar_insert_at_ptr(xbt_dynar_t const dynar, nb_shift = old_used - idx; - if (nb_shift) + if (nb_shift>0) { memmove(_xbt_dynar_elm(dynar, idx + 1), _xbt_dynar_elm(dynar, idx), nb_shift * dynar->elmsize); + } dynar->used = new_used; res = _xbt_dynar_elm(dynar, idx); @@ -725,6 +725,29 @@ XBT_INLINE void xbt_dynar_sort(xbt_dynar_t dynar, _dynar_unlock(dynar); } +/* + * Return 0 if d1 and d2 are equal and 1 if not equal + */ +XBT_INLINE int xbt_dynar_compare(xbt_dynar_t d1, xbt_dynar_t d2, + int(*compar)(const void *, const void *)) +{ + int i ; + int size; + if((!d1) && (!d2)) return 0; + if((!d1) || (!d2)) return 1; + if((d1->elmsize)!=(d2->elmsize)) return 1; // xbt_die + if(xbt_dynar_length(d1) != xbt_dynar_length(d2)) return 1; + + size = xbt_dynar_length(d1); + for(i=0;i=0; cpt--) { + xbt_dynar_replace(d, cpt, &cpt); + xbt_test_log2("Push %d, length=%lu", cpt, xbt_dynar_length(d)); + } + + /* 3. Traverse the dynar */ + xbt_dynar_foreach(d, cursor, cpt) { + xbt_test_assert2(cursor == cpt, + "The retrieved value is not the same than the injected one (%d!=%d)", + cursor, cpt); + } + /* end_of_traversal */ + + for (cpt =NB_ELEM-1; cpt >=0; cpt--) { + int val; + xbt_dynar_remove_at(d,xbt_dynar_length(d)-1,&val); + xbt_test_assert2(cpt == val, + "The retrieved value is not the same than the injected one (%d!=%d)", + cursor, cpt); + } + xbt_test_assert1(xbt_dynar_length(d) == 0, + "There is still %d elements in the dynar after removing everything", + xbt_dynar_length(d)); + xbt_dynar_free(&d); +} + /*******************************************************************************/ /*******************************************************************************/ /*******************************************************************************/