Add explicit traversal free
authorLukáš Jiřiště <gymnazium.jiriste@gmail.com>
Thu, 14 Aug 2025 12:41:54 +0000 (14:41 +0200)
committerLukáš Jiřiště <gymnazium.jiriste@gmail.com>
Thu, 14 Aug 2025 12:41:54 +0000 (14:41 +0200)
This is useful when something unexpected happens during traversal and
one needs to free the traversal.

ft_struct/ft_dict_traversal.c
ft_struct/ft_rbtree_traversal.c
inc/ft_struct.h

index 20e2f98436f4e6d100d08794b6d34afdc5138cdd..967bca2587a36c0b37d76c7ed70944cb731f2c2d 100644 (file)
@@ -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 ;
+}
index 5d28c86f713dd444f9bbb55d34c88c056c50027a..8e022d6d8ffb566247b81687075c52ebe9fcfb7d 100644 (file)
@@ -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 ;
+}
index 27440dc2177b0f37dc01460db41f74d1c2b9f1e2..f1bfbf457aa9b3165b5c088bcfd998df21e22beb 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: ljiriste <marvin@42.fr>                    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   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
 }