/* set - data container consisting in dict+dynar */
-/* Copyright (c) 2004, 2005, 2006, 2007, 2008, 2009, 2010. The SimGrid Team.
+/* Copyright (c) 2004-2014. The SimGrid Team.
* All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
static int _xbt_set_get_id(xbt_set_t set)
{
int id;
- if (xbt_dynar_length(set->available_ids) > 0) {
+ if (!xbt_dynar_is_empty(set->available_ids)) {
/* if there are some available ids */
xbt_dynar_pop(set->available_ids, &id);
} else {
*
* \param set set to populate
* \param elm element to add.
- * \param free_func How to add the data
+ * \param free_func how to free the data
*
* elm->name must be set;
* if elm->name_len <= 0, it is recomputed. If >0, it's used as is;
elm->ID = _xbt_set_get_id(set);
xbt_dict_set_ext(set->dict, elm->name, elm->name_len, elm, free_func);
xbt_dynar_set(set->dynar, elm->ID, &elm);
- XBT_DEBUG("Insertion of key '%s' (id %d)", elm->name, elm->ID);
+ XBT_DEBUG("Insertion of key '%s' (id %u)", elm->name, elm->ID);
xbt_ex_free(e);
}
if (found) {
if (elm == found_in_dict) {
XBT_DEBUG
- ("Ignoring request to insert the same element twice (key %s ; id %d)",
+ ("Ignoring request to insert the same element twice (key %s ; id %u)",
elm->name, elm->ID);
return;
} else {
elm->ID = found_in_dict->ID;
- XBT_DEBUG("Reinsertion of key %s (id %d)", elm->name, elm->ID);
+ XBT_DEBUG("Reinsertion of key %s (id %u)", elm->name, elm->ID);
xbt_dict_set_ext(set->dict, elm->name, elm->name_len, elm,
free_func);
xbt_dynar_set(set->dynar, elm->ID, &elm);
xbt_test_add("Search by name %s", key);
elm = (my_elem_t) xbt_set_get_by_name(head, key);
- xbt_test_log(" Found %s (under ID %d)\n",
+ xbt_test_log(" Found %s (under ID %u)\n",
elm ? elm->data : "(null)", elm ? elm->ID : -1);
+ if (elm == NULL)
+ THROWF(mismatch_error, 0,
+ "Got a null elm for name %s", key);
if (strcmp(key, elm->name))
THROWF(mismatch_error, 0, "The key (%s) is not the one expected (%s)",
key, elm->name);
elm = (my_elem_t) xbt_set_get_by_id(head, id);
xbt_test_log("Found %s (data %s)",
elm ? elm->name : "(null)", elm ? elm->data : "(null)");
+ if (elm == NULL)
+ THROWF(mismatch_error, 0,
+ "Got a null elm for id %d", id);
if (id != elm->ID)
THROWF(mismatch_error, 0,
- "The found ID (%d) is not the one expected (%d)", elm->ID, id);
+ "The found ID (%u) is not the one expected (%d)", elm->ID, id);
if (strcmp(key, elm->name))
THROWF(mismatch_error, 0, "The key (%s) is not the one expected (%s)",
elm->name, key);
xbt_set_foreach(set, cursor, elm) {
xbt_test_assert(elm, "Dude ! Got a null elm during traversal!");
- xbt_test_log("Id(%d): %s->%s\n", elm->ID, elm->name, elm->data);
+ if (!elm)
+ continue;
+ xbt_test_log("Id(%u): %s->%s\n", elm->ID, elm->name, elm->data);
xbt_test_assert(!strcmp(elm->name, elm->data),
- "Key(%s) != value(%s). Abording", elm->name,
+ "Key(%s) != value(%s). Aborting", elm->name,
elm->data);
}
}
xbt_test_add("Search 123");
elm = (my_elem_t) xbt_set_get_by_name(set, "123");
xbt_test_assert(elm, "elm must be there");
- xbt_assert(!strcmp("123", elm->data));
+ xbt_assert(elm && !strcmp("123", elm->data));
search_not_found(set, "Can't be found");
search_not_found(set, "123 Can't be found");
debuged_add(set, "12anew", "12anew");
elm = (my_elem_t) xbt_set_get_by_id(set, 1);
- xbt_test_assert(elm->ID == 1, "elm->ID is %d but should be 1", elm->ID);
+ xbt_test_assert(elm->ID == 1, "elm->ID is %u but should be 1", elm->ID);
xbt_set_free(&set);
}