diff options
Diffstat (limited to 'src/ht/ft_htset.c')
| -rw-r--r-- | src/ht/ft_htset.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/ht/ft_htset.c b/src/ht/ft_htset.c index 5ace788..4157134 100644 --- a/src/ht/ft_htset.c +++ b/src/ht/ft_htset.c @@ -6,21 +6,31 @@ /* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/01/30 08:41:52 by cacharle #+# #+# */ -/* Updated: 2020/01/31 10:33:39 by cacharle ### ########.fr */ +/* Updated: 2020/02/17 05:02:15 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ #include "libft.h" #include "libft_ht.h" -t_ftht_content *ft_htset(t_ftht *ht, char *key, void *value) +t_ftht_content *ft_htset(t_ftht *ht, char *key, void *value, void (*del)(void*)) { t_ftht_digest digest; t_ftht_content *content; t_ftht_entry entry; + t_ftlst *tmp; if (ht == NULL || key == NULL) return (NULL); + digest = ft_hthash(ht, key); + tmp = ft_lstlfind(ht->entries[digest], ft_inter_htkey_cmp, entry); + if (tmp != NULL) + { + if (del != NULL) + del(((t_ftht_content*)tmp->content)->value); + ((t_ftht_content*)tmp->content)->value = value; + return ((t_ftht_content*)tmp->content); + } if ((content = ft_htcontent_new(key, value)) == NULL) return (NULL); if ((entry = ft_lstnew(content)) == NULL) @@ -28,7 +38,6 @@ t_ftht_content *ft_htset(t_ftht *ht, char *key, void *value) free(content); return (NULL); } - digest = ft_hthash(ht, key); ft_lstadd_front(ht->entries + digest, entry); return (content); } |
