Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Define xbt_dictelm_set_data, to reduce code duplication.
authorArnaud Giersch <arnaud.giersch@iut-bm.univ-fcomte.fr>
Fri, 25 Nov 2011 21:06:19 +0000 (22:06 +0100)
committerArnaud Giersch <arnaud.giersch@iut-bm.univ-fcomte.fr>
Thu, 1 Dec 2011 10:32:48 +0000 (11:32 +0100)
src/xbt/dict.c
src/xbt/dict_cursor.c
src/xbt/dict_elm.c
src/xbt/dict_private.h

index 4bbe272..e678a99 100644 (file)
@@ -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);
   }
 }
 
index 8d78868..a83c005 100644 (file)
@@ -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);
 }
index ab3ae5b..f737b33 100644 (file)
@@ -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);
index a641b51..4c5dcc7 100644 (file)
@@ -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_ */