* Set the \a data in the structure under the \a key, which can be any kind
* of data, as long as its length is provided in \a key_len.
*/
-void xbt_dict_set_ext(xbt_dict_t dict,
+void xbt_dict_set_ext(xbt_dict_t dict,
const char *key,
int key_len,
void *data,
- void_f_pvoid_t *free_ctn) {
+ void_f_pvoid_t free_ctn) {
unsigned int hash_code;
xbt_dictelm_t current, previous = NULL;
* set the \a data in the structure under the \a key, which is a
* null terminated string.
*/
-void xbt_dict_set(xbt_dict_t dict,
+void xbt_dict_set(xbt_dict_t dict,
const char *key,
void *data,
- void_f_pvoid_t *free_ctn) {
+ void_f_pvoid_t free_ctn) {
xbt_assert(dict);
*/
void *xbt_dict_get_or_null(xbt_dict_t dict,
const char *key) {
- xbt_ex_t e;
- void *result = NULL;
- TRY {
- result = xbt_dict_get(dict, key);
- } CATCH(e) {
- if (e.category != not_found_error)
- RETHROW;
- xbt_ex_free(e);
- result = NULL;
+ unsigned int hash_code ;
+ xbt_dictelm_t current;
+
+ xbt_assert(dict);
+
+ hash_code = xbt_dict_hash(key) % dict->table_size;
+
+ current = dict->table[hash_code];
+ while (current != NULL && (strcmp(key, current->key))) {
+ current = current->next;
}
- return result;
+
+ if (current == NULL)
+ return NULL;
+
+ return current->content;
}
*/
void xbt_dict_dump(xbt_dict_t dict,
- void_f_pvoid_t *output) {
+ void_f_pvoid_t output) {
int i;
xbt_dictelm_t element;
printf("Dict %p:\n", dict);
while (element != NULL) {
printf("%s -> ", element->key);
if (output != NULL) {
- output(element->content);
+ (*output)(element->content);
}
printf("\n");
element = element->next;
void xbt_dict_exit(void) {
if (dict_mallocator != NULL) {
xbt_mallocator_free(dict_mallocator);
+ dict_mallocator = NULL;
xbt_mallocator_free(dict_elm_mallocator);
+ dict_elm_mallocator = NULL;
}
}