previous->next = current;
}
} else {
-
XBT_DEBUG("Replace %.*s by %.*s under key %.*s",
key_len, (char *) current->content,
key_len, (char *) data, key_len, (char *) key);
/* there is already an element with the same key: overwrite it */
- if (current->content != NULL && current->free_f != NULL) {
- current->free_f(current->content);
- }
- current->content = data;
- current->free_f = free_ctn;
+ xbt_dictelm_set_data(dict, current, data, free_ctn);
}
}
/* dict_cursor - iterators over dictionnaries */
-/* Copyright (c) 2004, 2005, 2006, 2007, 2008, 2009, 2010. The SimGrid Team.
+/* Copyright (c) 2004-2011. The SimGrid Team.
* All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
void_f_pvoid_t free_ctn)
{
__cursor_not_null(cursor);
- if (cursor->current->free_f)
- cursor->current->free_f(cursor->current->content);
-
- cursor->current->content = data;
- cursor->current->free_f = free_ctn;
- return;
+ xbt_dictelm_set_data(cursor->dict, cursor->current, data, free_ctn);
}
}
}
+void xbt_dictelm_set_data(xbt_dict_t dict, xbt_dictelm_t element,
+ void *data, void_f_pvoid_t free_ctn)
+{
+ if (element->free_f && element->content)
+ element->free_f(element->content);
+
+ element->content = data;
+ element->free_f = free_ctn;
+}
+
void *dict_elm_mallocator_new_f(void)
{
return xbt_new(s_xbt_dictelm_t, 1);
unsigned int hash_code, void *content,
void_f_pvoid_t free_f);
void xbt_dictelm_free(xbt_dict_t dict, xbt_dictelm_t element);
+void xbt_dictelm_set_data(xbt_dict_t dict, xbt_dictelm_t element,
+ void *data, void_f_pvoid_t free_ctn);
#endif /* _XBT_DICT_PRIVATE_H_ */