/* By: ljiriste <ljiriste@student.42prague.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/12/09 17:10:39 by ljiriste #+# #+# */
-/* Updated: 2023/12/09 18:23:06 by ljiriste ### ########.fr */
+/* Updated: 2023/12/10 15:01:35 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
#include "ft_vec.h"
#include "libft.h"
-t_vec_stat ft_vec_erase(t_vec *vec, size_t index)
+t_vec_stat ft_vec_erase(t_vec *vec, size_t index, void (*free_el)(void *))
{
if (!vec || index == SIZE_MAX)
return (invalid_input);
- ft_memmove(vec->vec + index, vec->vec + vec->el_size * (index + 1),
- vec->el_size * (vec->size - index - 1));
--vec->size;
+ ft_memmove(vec->vec + index, vec->vec + vec->el_size * (index + 1),
+ vec->el_size * (vec->size - index));
+ if (free_el)
+ free_el(vec->vec + vec->size * vec->el_size);
return (success);
}
/* By: ljiriste <ljiriste@student.42prague.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/12/09 17:37:13 by ljiriste #+# #+# */
-/* Updated: 2023/12/09 17:49:52 by ljiriste ### ########.fr */
+/* Updated: 2023/12/10 11:52:49 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
#include "ft_vec.h"
#include <stdlib.h>
-void ft_vec_free(t_vec *vec)
+void ft_vec_free(t_vec *vec, void (*free_el)(void *))
{
+ size_t i;
+
if (!vec)
return ;
+ i = 0;
+ if (free_el)
+ {
+ while (i < vec->size)
+ {
+ free_el(vec->vec + i * vec->el_size);
+ ++i;
+ }
+ }
free(vec->vec);
ft_vec_init(vec, vec->el_size);
return ;
/* By: ljiriste <ljiriste@student.42prague.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/12/09 13:58:15 by ljiriste #+# #+# */
-/* Updated: 2023/12/09 17:36:45 by ljiriste ### ########.fr */
+/* Updated: 2023/12/10 11:54:16 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
} t_vec;
t_vec_stat ft_vec_init(t_vec *vec, size_t el_size);
-void ft_vec_free(t_vec *vec);
+void ft_vec_free(t_vec *vec, void (*free_el)(void *));
t_vec_stat ft_vec_reserve(t_vec *vec, size_t capacity);
t_vec_stat ft_vec_append(t_vec *vec, const void *element);
t_vec_stat ft_vec_insert(t_vec *vec, const void *element, size_t index);
-t_vec_stat ft_vec_erase(t_vec *vec, size_t index);
+t_vec_stat ft_vec_erase(t_vec *vec, size_t index, void (*free_el)(void *));
void *ft_vec_access(t_vec *vec, size_t index);