*
* Get the Nth element of a dynar, removing it from the dynar and moving
* all subsequent values to one position left in the dynar.
+ *
+ * If the object argument of this function is a non-null pointer, the removed
+ * element is copied to this address. If not, the element is freed using the
+ * free_f function passed at dynar creation.
*/
void
xbt_dynar_remove_at(xbt_dynar_t const dynar,
void *const elem) {
int it;
- for (it=0; it< dynar->size; it++)
+ for (it=0; it< dynar->used; it++)
if (!memcmp(_xbt_dynar_elm(dynar, it),elem,dynar->elmsize))
return it;
*/
void xbt_dynar_cursor_rm(xbt_dynar_t dynar,
int * const cursor) {
- void *dst;
-
- if (dynar->elmsize > sizeof(void*)) {
- DEBUG0("Elements too big to fit into a pointer");
- if (dynar->free_f) {
- dst=xbt_malloc(dynar->elmsize);
- xbt_dynar_remove_at(dynar,(*cursor)--,dst);
- (dynar->free_f)(dst);
- free(dst);
- } else {
- DEBUG0("Ok, we dont care about the element without free function");
- xbt_dynar_remove_at(dynar,(*cursor)--,NULL);
- }
-
- } else {
- xbt_dynar_remove_at(dynar,(*cursor)--,&dst);
- if (dynar->free_f)
- (dynar->free_f)(dst);
- }
+
+ xbt_dynar_remove_at(dynar,(*cursor)--,NULL);
}
#ifdef SIMGRID_TEST