ft_vec_find_index.c \
ft_vec_copy.c \
\
+ ft_vec_contains.c \
+ ft_vec_is_subset.c \
+ ft_vec_is_setequal.c \
+ \
ft_mat_init.c \
ft_mat_append.c \
ft_mat_insert_col.c \
--- /dev/null
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_vec_contains.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: ljiriste <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2024/06/28 13:27:29 by ljiriste #+# #+# */
+/* Updated: 2024/06/28 13:39:14 by ljiriste ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "ft_arr.h"
+
+int ft_vec_contains(const t_vec *vec, const void *wanted,
+ int (*cmp_elements)(const void *, const void *))
+{
+ size_t i;
+ const void *element;
+
+ i = 0;
+ while (i < vec->size)
+ {
+ element = ft_vec_caccess(vec, i);
+ if (cmp_elements(wanted, element) == 0)
+ return (1);
+ ++i;
+ }
+ return (0);
+}
--- /dev/null
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_vec_is_setequal.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: ljiriste <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2024/06/28 13:45:07 by ljiriste #+# #+# */
+/* Updated: 2024/06/28 13:49:35 by ljiriste ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "ft_arr.h"
+
+int ft_vec_is_setequal(const t_vec *first, const t_vec *second,
+ int (*cmp_elements)(const void *, const void *))
+{
+ return (ft_vec_is_subset(first, second, cmp_elements)
+ && ft_vec_is_subset(second, first, cmp_elements));
+}
--- /dev/null
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_vec_is_subset.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: ljiriste <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2024/06/28 13:35:18 by ljiriste #+# #+# */
+/* Updated: 2024/06/28 13:50:31 by ljiriste ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "ft_arr.h"
+
+int ft_vec_is_subset(const t_vec *subset, const t_vec *set,
+ int (*cmp_elements)(const void *, const void *))
+{
+ size_t i;
+ const void *element;
+
+ i = 0;
+ while (i < subset->size)
+ {
+ element = ft_vec_caccess(subset, i);
+ if (!ft_vec_contains(set, element, cmp_elements))
+ return (0);
+ ++i;
+ }
+ return (1);
+}
/* By: ljiriste <ljiriste@student.42prague.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/12/09 13:58:15 by ljiriste #+# #+# */
-/* Updated: 2024/06/28 12:30:47 by ljiriste ### ########.fr */
+/* Updated: 2024/06/28 13:47:36 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
void *ft_vec_find(t_vec *vec, void *wanted);
t_arr_stat ft_vec_find_index(t_vec *vec, void *wanted, size_t *index);
+// The following are functions that would operate on sets.
+// I have not implemented set structure as it would be just a wrapper
+// on t_vec with worsened access to the elements.
+// The cmp_elements should return 0 when elements are equal (like strcmp)
+int ft_vec_contains(const t_vec *vec, const void *wanted,
+ int (*cmp_elements)(const void *, const void *));
+int ft_vec_is_subset(const t_vec *subset, const t_vec *set,
+ int (*cmp_elements)(const void *, const void *));
+int ft_vec_is_setequal(const t_vec *first, const t_vec *second,
+ int (*cmp_elements)(const void *, const void *));
+
t_arr_stat ft_mat_init(t_mat *mat, size_t el_size);
void ft_mat_free(t_mat *mat, void (*free_el)(void *));
t_arr_stat ft_mat_resize(t_mat *mat, size_t rows, size_t cols);