/* By: ljiriste <ljiriste@student.42prague.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/12/09 13:58:15 by ljiriste #+# #+# */
-/* Updated: 2025/07/31 07:21:49 by ljiriste ### ########.fr */
+/* Updated: 2025/08/02 16:23:54 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
typedef t_ft_stat t_arr_stat;
+typedef void (*t_free_fun)(void *);
+
// It should be possible to remove el_size with the use of macros?
typedef struct s_vec
{
t_arr_stat ft_vec_insert(t_vec *vec, const void *element, size_t index);
t_arr_stat ft_vec_append(t_vec *vec, const void *element);
t_arr_stat ft_vec_forget(t_vec *vec, size_t index);
-t_arr_stat ft_vec_erase(t_vec *vec, size_t index, void (*free_el)(void *));
+t_arr_stat ft_vec_erase(t_vec *vec, size_t index, t_free_fun free_el);
t_arr_stat ft_vec_insert_range(t_vec *vec, const void *element,
size_t count, size_t index);
t_arr_stat ft_vec_append_range(t_vec *vec, const void *element, size_t count);
t_arr_stat ft_vec_forget_range(t_vec *vec, size_t index, size_t count);
t_arr_stat ft_vec_erase_range(t_vec *vec, size_t count, size_t index,
- void (*free_el)(void *));
+ t_free_fun free_el);
t_arr_stat ft_vec_insert_empty(t_vec *vec, size_t i);
t_arr_stat ft_vec_insert_empty_range(t_vec *vec, size_t count, size_t i);
*/
t_arr_stat ft_vec_init(t_vec *vec, size_t el_size);
-void ft_vec_free(t_vec *vec, void (*free_el)(void *));
+void ft_vec_free(t_vec *vec, t_free_fun free_el);
void *ft_vec_access(t_vec *vec, size_t index);
const void *ft_vec_caccess(const t_vec *vec, size_t index);
*/
t_arr_stat ft_vec_copy(t_vec *dest, const t_vec *src,
t_ft_stat (*copy_el)(void *, const void *),
- void (*free_el)(void *));
+ t_free_fun free_el);
void *ft_vec_find(t_vec *vec, void *wanted,
int (*cmp_elements)(const void *, const void *));
int (*cmp_el)(const void *, const void *));
t_arr_stat ft_mat_init(t_mat *mat, size_t el_size);
-void ft_mat_free(t_mat *mat, void (*free_el)(void *));
+void ft_mat_free(t_mat *mat, t_free_fun free_el);
t_arr_stat ft_mat_resize(t_mat *mat, size_t rows, size_t cols);
t_arr_stat ft_mat_insert_row(t_mat *mat, const t_vec *vec, size_t index);
t_arr_stat ft_mat_insert_col(t_mat *mat, const t_vec *vec, size_t index);
t_arr_stat ft_mat_append_row(t_mat *mat, const t_vec *vec);
t_arr_stat ft_mat_append_col(t_mat *mat, const t_vec *vec);
t_arr_stat ft_mat_erase_rows(t_mat *mat, size_t count,
- size_t index, void (*free_el)(void *));
+ size_t index, t_free_fun free_el);
t_arr_stat ft_mat_erase_cols(t_mat *mat, size_t count,
- size_t index, void (*free_el)(void *));
+ size_t index, t_free_fun free_el);
void *ft_mat_access(t_mat *mat, size_t row, size_t col);
t_arr_stat ft_mat_zeros(t_mat *matrix, size_t rows, size_t cols);
t_arr_stat ft_mat_fill(t_mat *mat, void *filler);
/* By: ljiriste <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/06/20 16:59:43 by ljiriste #+# #+# */
-/* Updated: 2025/08/01 14:52:17 by ljiriste ### ########.fr */
+/* Updated: 2025/08/02 16:25:28 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
t_ft_stat ft_stack_init(t_stack *stack, size_t el_size);
t_ft_stat ft_stack_push(t_stack *stack, void *element);
void *ft_stack_top(t_stack *stack);
-void *ft_stack_pop(t_stack *stack, void (*free_el)(void *));
+void *ft_stack_pop(t_stack *stack, t_free_fun free_el);
void *ft_stack_pop_forget(t_stack *stack);
-void ft_stack_free(t_stack *stack, void (*free_el)(void *));
+void ft_stack_free(t_stack *stack, t_free_fun free_el);
// t_vec reserves memory for 8 elements at first
// it may be beneficial to add a member defining the number of children
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);
void ft_tree_set_data(t_tree_node *tree_node, void *element);
-t_ft_stat ft_tree_erase_subtree(t_tree_node *tree_node, size_t i, void (*free_el)(void *));
-t_ft_stat ft_tree_replace_with_child(t_tree_node *tree_node, size_t i, void (*free_el)(void *));
+t_ft_stat ft_tree_erase_subtree(t_tree_node *tree_node, size_t i, t_free_fun free_el);
+t_ft_stat ft_tree_replace_with_child(t_tree_node *tree_node, size_t i, t_free_fun free_el);
t_ft_stat ft_tree_forget_child(t_tree_node *tree_node, size_t i);
-void ft_tree_free(t_tree *tree, void (*free_el)(void *));
+void ft_tree_free(t_tree *tree, t_free_fun free_el);
// I wanted to use t_tree_node to define binary tree and use that
// to define a red-black and AVL trees
};
t_ft_stat ft_rbtree_init(t_rbtree *tree, size_t el_size, t_cmp_fun cmp_el);
-void ft_rbtree_free(t_rbtree *tree, void (*free_el)(void *));
+void ft_rbtree_free(t_rbtree *tree, t_free_fun free_el);
t_ft_stat ft_rbtree_insert(t_rbtree *tree, void *element);
void *ft_rbtree_search(t_rbtree *tree, void *element);
-void ft_rbtree_delete(t_rbtree *tree, void *element, void (*free_el)(void *));
+void ft_rbtree_delete(t_rbtree *tree, void *element, t_free_fun free_el);
t_rbtree_node *ft_rbtree_search_node(t_rbtree_node *node, void *element);
-void ft_rbtree_erase_node(t_rbtree_node *node, void (*free_el)(void *));
+void ft_rbtree_erase_node(t_rbtree_node *node, t_free_fun free_el);
t_rbtree_node *ft_rbtree_decide(t_rbtree_node *node, int cmp_res);
int ft_rbtree_is_black(t_rbtree_node *node);