/* By: ljiriste <ljiriste@student.42prague.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/01/11 11:04:05 by ljiriste #+# #+# */
-/* Updated: 2024/01/11 12:27:10 by ljiriste ### ########.fr */
+/* Updated: 2024/12/17 20:35:19 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
#include "libft.h"
-void *ft_vec_find(t_vec *vec, void *wanted)
+void *ft_vec_find(t_vec *vec, void *wanted,
+ int (*cmp_element)(const void *, const void *))
{
- size_t i;
+ size_t index;
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;
- }
+ if (ft_vec_find_index(vec, wanted, &index, cmp_element) == success)
+ return (ft_vec_access(vec, index));
return (NULL);
}
/* By: ljiriste <ljiriste@student.42prague.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/01/11 11:49:41 by ljiriste #+# #+# */
-/* Updated: 2024/01/12 17:10:23 by ljiriste ### ########.fr */
+/* Updated: 2024/12/17 20:34:45 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
#include "libft.h"
-t_arr_stat ft_vec_find_index(t_vec *vec, void *wanted, size_t *index)
+t_arr_stat ft_vec_find_index(t_vec *vec, void *wanted, size_t *index,
+ int (*cmp_elements)(const void *, const void *))
{
+ size_t i;
+
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);
+ i = 0;
+ while (i < vec->size)
+ {
+ if (cmp_elements(wanted, ft_vec_caccess(vec, i)) == 0)
+ {
+ *index = i;
+ return (success);
+ }
+ ++i;
+ }
+ return (non_specific_failure);
}
/* By: ljiriste <ljiriste@student.42prague.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/12/09 13:58:15 by ljiriste #+# #+# */
-/* Updated: 2024/07/04 10:20:25 by ljiriste ### ########.fr */
+/* Updated: 2024/12/17 20:34:11 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
t_ft_stat (*copy_el)(void *, const void *),
void (*free_el)(void *));
-void *ft_vec_find(t_vec *vec, void *wanted);
-t_arr_stat ft_vec_find_index(t_vec *vec, void *wanted, size_t *index);
+void *ft_vec_find(t_vec *vec, void *wanted,
+ int (*cmp_elements)(const void *, const void *));
+t_arr_stat ft_vec_find_index(t_vec *vec, void *wanted, size_t *index,
+ int (*cmp_elements)(const void *, const void *));
int ft_vec_is_equal(const t_vec *vec1, const t_vec *vec2,
int (*cmp_elements)(const void *, const void *));