From 7decbe68259d03d3b60dc71448a0fc980aa4b11d Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Wed, 15 Jun 2011 15:46:10 +0000 Subject: [PATCH] eina: +eina_hash_free_set. SVN revision: 60354 --- legacy/eina/ChangeLog | 7 ++++++- legacy/eina/src/include/eina_hash.h | 9 +++++++++ legacy/eina/src/lib/eina_hash.c | 9 +++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/legacy/eina/ChangeLog b/legacy/eina/ChangeLog index db14e5326d..d6becc6641 100644 --- a/legacy/eina/ChangeLog +++ b/legacy/eina/ChangeLog @@ -102,7 +102,12 @@ * Fix eina_hash_set to handle data == NULL like eina_hash_del. -2011-06-3 Vincent Torri +2011-06-03 Vincent Torri * Fix static linking with eina (iconv could potentially not be passed to the linker) + +2011-06-15 Cedric Bail + + * Add eina_hash_free_set to change the free callback during the + life of an Eina_Hash. diff --git a/legacy/eina/src/include/eina_hash.h b/legacy/eina/src/include/eina_hash.h index 373c6b6025..6609de88a5 100644 --- a/legacy/eina/src/include/eina_hash.h +++ b/legacy/eina/src/include/eina_hash.h @@ -263,6 +263,15 @@ EAPI Eina_Hash *eina_hash_new(Eina_Key_Length key_length_cb, Eina_Free_Cb data_free_cb, int buckets_power_size) EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(2, 3); +/** + * @brief Redefine the callback that clean the data of a hash + * + * @param hash The given hash table + * @param data_free_cb The function called on each value when the hash + * table is freed. @c NULL can be passed as callback. + */ +EAPI void eina_hash_free_set(Eina_Hash *hash, Eina_Free_Cb data_free_cb) EINA_ARG_NONNULL(1); + /** * @brief Create a new hash table using the djb2 algorithm. * diff --git a/legacy/eina/src/lib/eina_hash.c b/legacy/eina/src/lib/eina_hash.c index bf1bcd70a5..9b237ff96d 100644 --- a/legacy/eina/src/lib/eina_hash.c +++ b/legacy/eina/src/lib/eina_hash.c @@ -713,6 +713,15 @@ _eina_hash_iterator_free(Eina_Iterator_Hash *it) * API * *============================================================================*/ +EAPI void +eina_hash_free_set(Eina_Hash *hash, Eina_Free_Cb data_free_cb) +{ + EINA_MAGIC_CHECK_HASH(hash); + EINA_SAFETY_ON_NULL_RETURN(hash); + + hash->data_free_cb = data_free_cb; +} + EAPI Eina_Hash * eina_hash_new(Eina_Key_Length key_length_cb, Eina_Key_Cmp key_cmp_cb,