From: Lukáš Jiřiště Date: Wed, 17 Sep 2025 06:37:49 +0000 (+0200) Subject: Add a dictionary traversal that also returns key X-Git-Url: https://git.ljiriste.work/?a=commitdiff_plain;h=7ea0e5eab36b56b286a76770d618ff5ea5fc3be7;p=Libft.git Add a dictionary traversal that also returns key --- diff --git a/ft_struct/ft_dict_traversal.c b/ft_struct/ft_dict_traversal.c index ccc3df4..cea55db 100644 --- a/ft_struct/ft_dict_traversal.c +++ b/ft_struct/ft_dict_traversal.c @@ -6,14 +6,23 @@ t_ft_stat ft_dict_traversal_init(t_dict_traversal *traversal, t_dict *dict) return (ft_rbtree_traversal_init(&traversal->traversal, &dict->tree, inorder)); } -void *ft_dict_traverse(t_dict_traversal *traversal) +t_dict_entry ft_dict_traverse_full(t_dict_traversal *traversal) { - void *return_composite; + t_dict_entry dict_entry; + + dict_entry.key = ft_rbtree_traverse(&traversal->traversal); + if (!dict_entry.key) + { + dict_entry.el = NULL; + return (dict_entry); + } + dict_entry.el = (char *)dict_entry.key + traversal->key_size; + return (dict_entry); +} - return_composite = ft_rbtree_traverse(&traversal->traversal); - if (!return_composite) - return (NULL); - return ((char *)return_composite + traversal->key_size); +void *ft_dict_traverse(t_dict_traversal *traversal) +{ + return (ft_dict_traverse_full(traversal).el); } void ft_dict_traversal_free(t_dict_traversal *traversal) diff --git a/inc/ft_struct.h b/inc/ft_struct.h index f1bfbf4..3f072d8 100644 --- a/inc/ft_struct.h +++ b/inc/ft_struct.h @@ -6,7 +6,7 @@ /* By: ljiriste +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/20 16:59:43 by ljiriste #+# #+# */ -/* Updated: 2025/08/14 14:41:41 by ljiriste ### ########.fr */ +/* Updated: 2025/09/17 08:36:29 by ljiriste ### ########.fr */ /* */ /* ************************************************************************** */ @@ -131,6 +131,12 @@ t_ft_stat ft_dict_insert(t_dict *dict, void *key, void *element); void *ft_dict_access(t_dict *dict, void *key); void ft_dict_delete(t_dict *dict, void *key, t_free_fun free_key, t_free_fun free_el); +typedef struct s_dict_entry +{ + void *key; + void *el; +} t_dict_entry; + typedef struct s_dict_traversal { size_t key_size; @@ -138,6 +144,7 @@ typedef struct s_dict_traversal } t_dict_traversal; t_ft_stat ft_dict_traversal_init(t_dict_traversal *traversal, t_dict *dict); +t_dict_entry ft_dict_traverse_full(t_dict_traversal *traversal); void *ft_dict_traverse(t_dict_traversal *traversal); void ft_dict_traversal_free(t_dict_traversal *traversal);