git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@1379
48e7efb5-ca39-0410-a469-
dd3cf9ba447f
*/
void*
xbt_dynar_get_ptr(const xbt_dynar_t dynar,
*/
void*
xbt_dynar_get_ptr(const xbt_dynar_t dynar,
__sanity_check_dynar(dynar);
__sanity_check_idx(idx);
__sanity_check_dynar(dynar);
__sanity_check_idx(idx);
const int idx,
void * const object) {
const int idx,
void * const object) {
+ unsigned long nb_shift;
+ unsigned long offset;
+
__sanity_check_dynar(dynar);
__sanity_check_idx(idx);
__check_inbound_idx(dynar, idx);
__sanity_check_dynar(dynar);
__sanity_check_idx(idx);
__check_inbound_idx(dynar, idx);
_xbt_dynar_get_elm(object, dynar, idx);
_xbt_dynar_get_elm(object, dynar, idx);
+ } else if (dynar->free_f) {
+ char elm[SIZEOF_MAX];
+ _xbt_dynar_get_elm(elm, dynar, idx);
+ (*dynar->free_f)(elm);
+ }
- {
- const unsigned long old_used = dynar->used;
- const unsigned long new_used = old_used - 1;
-
- const unsigned long nb_shift = old_used-1 - idx;
- const unsigned long elmsize = dynar->elmsize;
-
- const unsigned long offset = nb_shift*elmsize;
-
- void * const elm_src = _xbt_dynar_elm(dynar, idx+1);
- void * const elm_dst = _xbt_dynar_elm(dynar, idx);
+ nb_shift = dynar->used-1 - idx;
+ offset = nb_shift * dynar->elmsize;
- memmove(elm_dst, elm_src, offset);
+ memmove(_xbt_dynar_elm(dynar, idx),
+ _xbt_dynar_elm(dynar, idx+1),
+ offset);
- dynar->used = new_used;
- }
}
/** @brief Make room at the end of the dynar for a new element, and return a pointer to it.
}
/** @brief Make room at the end of the dynar for a new element, and return a pointer to it.