From 2447a14f38be8e2de8f3984dc708800b36f36c98 Mon Sep 17 00:00:00 2001 From: Lukas Jiriste Date: Fri, 12 Jan 2024 21:27:38 +0100 Subject: [PATCH] Add functions for finding element in vector --- Makefile | 2 ++ ft_arr/ft_vec_find.c | 31 +++++++++++++++++++++++++++++++ ft_arr/ft_vec_find_index.c | 24 ++++++++++++++++++++++++ inc/ft_arr.h | 4 +++- 4 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 ft_arr/ft_vec_find.c create mode 100644 ft_arr/ft_vec_find_index.c diff --git a/Makefile b/Makefile index a4a3806..b66e514 100644 --- a/Makefile +++ b/Makefile @@ -94,6 +94,8 @@ SRCarr := ft_vec_init.c \ ft_vec_erase.c \ ft_vec_access.c \ ft_vec_free.c \ + ft_vec_find.c \ + ft_vec_find_index.c \ \ ft_mat_init.c \ ft_mat_append.c \ diff --git a/ft_arr/ft_vec_find.c b/ft_arr/ft_vec_find.c new file mode 100644 index 0000000..93564ab --- /dev/null +++ b/ft_arr/ft_vec_find.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_vec_find.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: ljiriste +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/01/11 11:04:05 by ljiriste #+# #+# */ +/* Updated: 2024/01/11 12:27:10 by ljiriste ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void *ft_vec_find(t_vec *vec, void *wanted) +{ + size_t i; + + if (!vec || !wanted) + return (NULL); + i = 0; + while (i < vec->size) + { + if (!ft_memcmp(ft_vec_access(vec, i), wanted, vec->el_size)) + { + return (ft_vec_access(vec, i)); + } + ++i; + } + return (NULL); +} diff --git a/ft_arr/ft_vec_find_index.c b/ft_arr/ft_vec_find_index.c new file mode 100644 index 0000000..988acfc --- /dev/null +++ b/ft_arr/ft_vec_find_index.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_vec_find_index.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: ljiriste +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/01/11 11:49:41 by ljiriste #+# #+# */ +/* Updated: 2024/01/12 17:10:23 by ljiriste ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_arr_stat ft_vec_find_index(t_vec *vec, void *wanted, size_t *index) +{ + if (!vec || !wanted || !index) + return (invalid_input); + wanted = ft_vec_find(vec, wanted); + if (wanted == NULL) + return (non_specific_failure); + *index = (size_t)(((char *)wanted - (char *)vec->vec) / vec->el_size); + return (success); +} diff --git a/inc/ft_arr.h b/inc/ft_arr.h index 623ceba..38fb0e4 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: 2024/01/12 19:13:06 by ljiriste ### ########.fr */ +/* Updated: 2024/01/12 21:25:42 by ljiriste ### ########.fr */ /* */ /* ************************************************************************** */ @@ -69,6 +69,8 @@ void *ft_vec_access(t_vec *vec, size_t index); * Also implement access function that casts to desired type * eg. int *int_access(t_vec *vec, size_t ind){return ((int *)vec->vec + ind);} */ +void *ft_vec_find(t_vec *vec, void *wanted); +t_arr_stat ft_vec_find_index(t_vec *vec, void *wanted, size_t *index); t_arr_stat ft_mat_init(t_mat *mat, size_t el_size); void ft_mat_free(t_mat *mat, void (*free_el)(void *)); -- 2.30.2