From 5e1241532e39968762e7cfa80133c0573fa0f24a Mon Sep 17 00:00:00 2001 From: Arnaud Giersch Date: Fri, 25 Nov 2011 22:06:19 +0100 Subject: [PATCH] Define xbt_dictelm_set_data, to reduce code duplication. --- src/xbt/dict.c | 7 +------ src/xbt/dict_cursor.c | 9 ++------- src/xbt/dict_elm.c | 10 ++++++++++ src/xbt/dict_private.h | 2 ++ 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/xbt/dict.c b/src/xbt/dict.c index 4bbe272342..e678a99f37 100644 --- a/src/xbt/dict.c +++ b/src/xbt/dict.c @@ -255,16 +255,11 @@ XBT_INLINE void xbt_dict_set_ext(xbt_dict_t dict, 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); } } diff --git a/src/xbt/dict_cursor.c b/src/xbt/dict_cursor.c index 8d78868393..a83c005d58 100644 --- a/src/xbt/dict_cursor.c +++ b/src/xbt/dict_cursor.c @@ -1,6 +1,6 @@ /* 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 @@ -197,10 +197,5 @@ XBT_INLINE void xbt_dict_cursor_set_data(xbt_dict_cursor_t cursor, 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); } diff --git a/src/xbt/dict_elm.c b/src/xbt/dict_elm.c index ab3ae5bb7d..f737b3318e 100644 --- a/src/xbt/dict_elm.c +++ b/src/xbt/dict_elm.c @@ -56,6 +56,16 @@ 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) +{ + 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); diff --git a/src/xbt/dict_private.h b/src/xbt/dict_private.h index a641b51d92..4c5dcc7390 100644 --- a/src/xbt/dict_private.h +++ b/src/xbt/dict_private.h @@ -53,5 +53,7 @@ xbt_dictelm_t xbt_dictelm_new(xbt_dict_t dict, const char *key, int key_len, 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_ */ -- 2.20.1