Add functions for finding element in vector
authorLukas Jiriste <ljiriste@student.42prague.com>
Fri, 12 Jan 2024 20:27:38 +0000 (21:27 +0100)
committerLukas Jiriste <ljiriste@student.42prague.com>
Fri, 12 Jan 2024 20:35:39 +0000 (21:35 +0100)
Makefile
ft_arr/ft_vec_find.c [new file with mode: 0644]
ft_arr/ft_vec_find_index.c [new file with mode: 0644]
inc/ft_arr.h

index a4a3806ff0d57abd8154acb514d2f4eb8bb20641..b66e514c9b4175cfac2ae29376412dbcd613e4f9 100644 (file)
--- 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 (file)
index 0000000..93564ab
--- /dev/null
@@ -0,0 +1,31 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   ft_vec_find.c                                      :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   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       */
+/*                                                                            */
+/* ************************************************************************** */
+
+#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 (file)
index 0000000..988acfc
--- /dev/null
@@ -0,0 +1,24 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   ft_vec_find_index.c                                :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   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       */
+/*                                                                            */
+/* ************************************************************************** */
+
+#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);
+}
index 623ceba464afeb307c6f2ef4819466ff31243db0..38fb0e4a29d74c1063b4019a2f213a24b35bdaf3 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: ljiriste <ljiriste@student.42prague.com>   +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   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 *));