From 70565b5ddfee6556ab1874224501c71984572be9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Luk=C3=A1=C5=A1=20Ji=C5=99i=C5=A1t=C4=9B?= Date: Thu, 14 Aug 2025 14:41:54 +0200 Subject: [PATCH] Add explicit traversal free This is useful when something unexpected happens during traversal and one needs to free the traversal. --- ft_struct/ft_dict_traversal.c | 6 ++++++ ft_struct/ft_rbtree_traversal.c | 8 +++++++- inc/ft_struct.h | 4 +++- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/ft_struct/ft_dict_traversal.c b/ft_struct/ft_dict_traversal.c index 20e2f98..967bca2 100644 --- a/ft_struct/ft_dict_traversal.c +++ b/ft_struct/ft_dict_traversal.c @@ -10,3 +10,9 @@ void *ft_dict_traverse(t_dict_traversal *traversal) { return ((char *)ft_rbtree_traverse(&traversal->traversal) + traversal->key_size); } + +void ft_dict_traversal_free(t_dict_traversal *traversal) +{ + ft_rbtree_traversal_free(&traversal->traversal); + return ; +} diff --git a/ft_struct/ft_rbtree_traversal.c b/ft_struct/ft_rbtree_traversal.c index 5d28c86..8e022d6 100644 --- a/ft_struct/ft_rbtree_traversal.c +++ b/ft_struct/ft_rbtree_traversal.c @@ -128,6 +128,12 @@ void *ft_rbtree_traverse(t_rbtree_traversal *traversal) node = ft_stack_pop_forget(&traversal->stack); if (node && *node) return (&(*node)->data); - ft_stack_free(&traversal->stack, NULL); + ft_rbtree_traversal_free(traversal); return (NULL); } + +void ft_rbtree_traversal_free(t_rbtree_traversal *traversal) +{ + ft_stack_free(&traversal->stack, NULL); + return ; +} diff --git a/inc/ft_struct.h b/inc/ft_struct.h index 27440dc..f1bfbf4 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:33:38 by ljiriste ### ########.fr */ +/* Updated: 2025/08/14 14:41:41 by ljiriste ### ########.fr */ /* */ /* ************************************************************************** */ @@ -116,6 +116,7 @@ typedef struct s_rbtree_traversal t_ft_stat ft_rbtree_traversal_init(t_rbtree_traversal *traversal, t_rbtree *tree, t_traversal_order order); void *ft_rbtree_traverse(t_rbtree_traversal *traversal); +void ft_rbtree_traversal_free(t_rbtree_traversal *traversal); typedef struct s_dict { @@ -138,6 +139,7 @@ typedef struct s_dict_traversal t_ft_stat ft_dict_traversal_init(t_dict_traversal *traversal, t_dict *dict); void *ft_dict_traverse(t_dict_traversal *traversal); +void ft_dict_traversal_free(t_dict_traversal *traversal); # ifdef __cplusplus } -- 2.30.2