From a03c47b6543571d1710830621bef2e85dd1b3480 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Luk=C3=A1=C5=A1=20Ji=C5=99i=C5=A1t=C4=9B?= Date: Thu, 31 Jul 2025 07:26:05 +0200 Subject: [PATCH] Add insertion of "empty" elements to t_vec --- Makefile | 2 ++ ft_arr/ft_vec_append_empty.c | 11 +++++++++++ ft_arr/ft_vec_insert_empty.c | 31 +++++++++++++++++++++++++++++++ inc/ft_arr.h | 7 ++++++- 4 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 ft_arr/ft_vec_append_empty.c create mode 100644 ft_arr/ft_vec_insert_empty.c diff --git a/Makefile b/Makefile index aeb972a..9e93dde 100644 --- a/Makefile +++ b/Makefile @@ -141,6 +141,8 @@ SRCarr := ft_vec_init.c \ ft_vec_find.c \ ft_vec_find_index.c \ ft_vec_copy.c \ + ft_vec_insert_empty.c \ + ft_vec_append_empty.c \ \ ft_vec_is_equal.c \ \ diff --git a/ft_arr/ft_vec_append_empty.c b/ft_arr/ft_vec_append_empty.c new file mode 100644 index 0000000..fcacec8 --- /dev/null +++ b/ft_arr/ft_vec_append_empty.c @@ -0,0 +1,11 @@ +#include "ft_arr.h" + +t_arr_stat ft_vec_append_empty(t_vec *vec) +{ + return (ft_vec_append_empty_range(vec, 1)); +} + +t_arr_stat ft_vec_append_empty_range(t_vec *vec, size_t count) +{ + return (ft_vec_insert_empty_range(vec, count, vec->size)); +} diff --git a/ft_arr/ft_vec_insert_empty.c b/ft_arr/ft_vec_insert_empty.c new file mode 100644 index 0000000..1cca512 --- /dev/null +++ b/ft_arr/ft_vec_insert_empty.c @@ -0,0 +1,31 @@ +#include "ft_arr.h" +#include "libft.h" + +t_arr_stat ft_vec_insert_empty(t_vec *vec, size_t index) +{ + return (ft_vec_insert_empty_range(vec, 1, index)); +} + +t_arr_stat ft_vec_insert_empty_range(t_vec *vec, + size_t count, size_t index) +{ + if (count == 0) + return (success); + if (!vec || index > SIZE_MAX - count) + return (invalid_input); + while (vec->size == vec->capacity || index + count > vec->capacity) + { + if (ft_vec_enlarge(vec)) + return (alloc_fail); + } + if (index < vec->size) + ft_memmove((char *)vec->vec + vec->el_size * (index + count), + (char *)vec->vec + vec->el_size * index, + vec->el_size * (vec->size - index)); + ft_bzero((char *)vec->vec + vec->el_size * index, + vec->el_size * count); + if (index > vec->size) + vec->size = index; + vec->size += count; + return (success); +} diff --git a/inc/ft_arr.h b/inc/ft_arr.h index fc88514..233e303 100644 --- a/inc/ft_arr.h +++ b/inc/ft_arr.h @@ -6,7 +6,7 @@ /* By: ljiriste +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/12/09 13:58:15 by ljiriste #+# #+# */ -/* Updated: 2025/03/26 20:34:00 by ljiriste ### ########.fr */ +/* Updated: 2025/07/31 07:21:49 by ljiriste ### ########.fr */ /* */ /* ************************************************************************** */ @@ -56,6 +56,11 @@ 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_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_append_empty(t_vec *vec); +t_arr_stat ft_vec_append_empty_range(t_vec *vec, size_t count); + // This macro should have been used for static t_vec initialization // as I see no other way. // But the Norm forbids macro functions, so just use the literal itself -- 2.30.2