ft_stack_push.c \
ft_stack_top.c \
ft_tree_init.c \
+ ft_tree_access_root.c \
ft_tree_append_child.c \
ft_tree_access_child.c \
ft_tree_access_data.c \
--- /dev/null
+#include "ft_struct.h"
+
+t_tree_node *ft_tree_access_root(t_tree *tree)
+{
+ if (!tree)
+ return (NULL);
+ return (*tree);
+}
#include "ft_struct.h"
#include "libft.h"
+#include <stdlib.h>
void ft_tree_free(t_tree *tree, void (*free_el)(void *))
{
- if (!tree)
+ t_tree_node *root;
+
+ if (!tree || !*tree)
return ;
- while (tree->children.size > 0)
- ft_tree_erase_subtree(tree, 0, free_el);
+ root = ft_tree_access_root(tree);
+ while (root->children.size > 0)
+ ft_tree_erase_subtree(root, 0, free_el);
if (free_el)
- free_el(&tree->data);
- ft_vec_free(&tree->children, NULL);
+ free_el(&root->data);
+ ft_vec_free(&root->children, NULL);
+ free(root);
+ *tree = NULL;
return ;
}
#include "libft.h"
#include <stdlib.h>
-t_ft_stat ft_tree_init(t_tree *tree, size_t el_size)
+t_ft_stat ft_tree_init(t_tree *tree, void *root_element, size_t el_size)
{
- if (!tree || el_size == 0)
+ t_tree_node *root;
+
+ if (!tree || !root_element || el_size == 0)
return (invalid_input);
- tree->parent = NULL;
- ft_bzero(&tree->data, el_size);
- return (ft_vec_init(&tree->children, sizeof(t_tree_node) + el_size));
+ root = malloc(sizeof(t_tree_node) + el_size);
+ if (!root)
+ return (alloc_fail);
+ *tree = root;
+ root->parent = NULL;
+ ft_memcpy(&root->data, root_element, el_size);
+ return (ft_vec_init(&root->children, sizeof(t_tree_node) + el_size));
}
/* By: ljiriste <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/06/20 16:59:43 by ljiriste #+# #+# */
-/* Updated: 2025/07/31 13:25:53 by ljiriste ### ########.fr */
+/* Updated: 2025/07/31 14:07:12 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
char data[];
};
-typedef t_tree_node t_tree;
+typedef t_tree_node *t_tree;
-t_ft_stat ft_tree_init(t_tree *tree, size_t el_size);
+t_ft_stat ft_tree_init(t_tree *tree, void *root_element, size_t el_size);
+t_tree_node *ft_tree_access_root(t_tree *tree);
t_ft_stat ft_tree_append_child(t_tree_node *tree_node, void *element);
t_tree_node *ft_tree_access_child(t_tree_node *tree_node, size_t i);
void *ft_tree_access_data(t_tree_node *tree_node);