aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile4
-rw-r--r--include/libft_vec.h6
-rw-r--r--src/vec/ft_vecinsert_safe.c20
-rw-r--r--src/vec/ft_veciter_addr.c25
-rw-r--r--src/vec/ft_vecremove.c11
-rw-r--r--src/vec/ft_vectake.c26
-rw-r--r--src/vec/ft_vecunwrap.c22
7 files changed, 105 insertions, 9 deletions
diff --git a/Makefile b/Makefile
index f1554b1..a1da52d 100644
--- a/Makefile
+++ b/Makefile
@@ -6,7 +6,7 @@
# By: cacharle <marvin@42.fr> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ #
# Created: 2019/10/08 15:45:53 by cacharle #+# #+# #
-# Updated: 2020/04/01 22:00:44 by charles ### ########.fr #
+# Updated: 2020/06/09 15:43:26 by charles ### ########.fr #
# #
# **************************************************************************** #
@@ -29,7 +29,7 @@ INCLUDE_DIR = include
CC = gcc
-OFLAG ?= -O1
+OFLAG ?= -g -O1
CCFLAGS = $(OFLAG) -I$(INCLUDE_DIR) -Wall -Wextra -Werror
ifeq ($(TRAVIS_COMPILER),gcc)
CCFLAGS += -Wno-unused-result
diff --git a/include/libft_vec.h b/include/libft_vec.h
index 8424bd5..1503f14 100644
--- a/include/libft_vec.h
+++ b/include/libft_vec.h
@@ -6,7 +6,7 @@
/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/04/01 18:57:16 by charles #+# #+# */
-/* Updated: 2020/04/04 15:55:29 by charles ### ########.fr */
+/* Updated: 2020/06/09 13:53:48 by charles ### ########.fr */
/* */
/* ************************************************************************** */
@@ -44,8 +44,12 @@ t_ftvec *ft_vecpush(t_ftvec *vec, void *pushed);
t_ftvec *ft_vecpush_safe(t_ftvec *vec, void *pushed);
void ft_vecpop(t_ftvec *vec, void (*del)(void *elem));
void ft_veciter(t_ftvec *vec, void (*f)(void *elem));
+void ft_veciter_addr(t_ftvec *vec, void (*f)(void **addr));
+void *ft_vectake(t_ftvec *vec, size_t i);
void ft_vecremove(t_ftvec *vec, size_t i, void (*del)(void *elem));
t_ftvec *ft_vecinsert(t_ftvec *vec, size_t i, void *elem);
+t_ftvec *ft_vecinsert_safe(t_ftvec *vec, size_t i, void *elem);
void ft_vecsort(t_ftvec *vec, t_ftcompar_func cmp);
+void **ft_vecunwrap(t_ftvec *vec);
#endif
diff --git a/src/vec/ft_vecinsert_safe.c b/src/vec/ft_vecinsert_safe.c
new file mode 100644
index 0000000..24e8cac
--- /dev/null
+++ b/src/vec/ft_vecinsert_safe.c
@@ -0,0 +1,20 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_vecinsert_safe.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/06/09 13:41:03 by charles #+# #+# */
+/* Updated: 2020/06/09 13:41:04 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "libft_vec.h"
+
+t_ftvec *ft_vecinsert_safe(t_ftvec *vec, size_t i, void *elem)
+{
+ if (elem == NULL)
+ return (NULL);
+ return (ft_vecinsert(vec, i, elem));
+}
diff --git a/src/vec/ft_veciter_addr.c b/src/vec/ft_veciter_addr.c
new file mode 100644
index 0000000..09f6926
--- /dev/null
+++ b/src/vec/ft_veciter_addr.c
@@ -0,0 +1,25 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_veciter_addr.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/06/09 13:52:38 by charles #+# #+# */
+/* Updated: 2020/06/09 13:53:30 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "libft_vec.h"
+
+void ft_veciter_addr(t_ftvec *vec, void (*f)(void **addr))
+{
+ size_t i;
+
+ i = 0;
+ while (i < vec->size)
+ {
+ f(vec->data + i);
+ i++;
+ }
+}
diff --git a/src/vec/ft_vecremove.c b/src/vec/ft_vecremove.c
index d24ba29..28ea541 100644
--- a/src/vec/ft_vecremove.c
+++ b/src/vec/ft_vecremove.c
@@ -6,7 +6,7 @@
/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/04/01 22:45:07 by charles #+# #+# */
-/* Updated: 2020/04/01 22:58:21 by charles ### ########.fr */
+/* Updated: 2020/06/09 13:28:26 by charles ### ########.fr */
/* */
/* ************************************************************************** */
@@ -21,11 +21,10 @@
void ft_vecremove(t_ftvec *vec, size_t i, void (*del)(void *elem))
{
- if (vec->size == 0 || i > vec->size - 1)
+ void *tmp;
+
+ if ((tmp = ft_vectake(vec, i)) == NULL)
return ;
if (del != NULL)
- del(vec->data[i]);
- ft_memmove(vec->data + i, vec->data + i + 1,
- (vec->size - i - 1) * sizeof(void*));
- vec->size--;
+ del(tmp);
}
diff --git a/src/vec/ft_vectake.c b/src/vec/ft_vectake.c
new file mode 100644
index 0000000..25a9038
--- /dev/null
+++ b/src/vec/ft_vectake.c
@@ -0,0 +1,26 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_vectake.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/06/09 13:27:19 by charles #+# #+# */
+/* Updated: 2020/06/09 13:29:02 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "libft_vec.h"
+
+void *ft_vectake(t_ftvec *vec, size_t i)
+{
+ void *taken;
+
+ if (vec->size == 0 || i > vec->size - 1)
+ return (NULL);
+ taken = vec->data[i];
+ ft_memmove(vec->data + i, vec->data + i + 1,
+ (vec->size - i - 1) * sizeof(void*));
+ vec->size--;
+ return (taken);
+}
diff --git a/src/vec/ft_vecunwrap.c b/src/vec/ft_vecunwrap.c
new file mode 100644
index 0000000..c1ab476
--- /dev/null
+++ b/src/vec/ft_vecunwrap.c
@@ -0,0 +1,22 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_vecunwrap.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/06/09 13:49:50 by charles #+# #+# */
+/* Updated: 2020/06/09 13:50:33 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "libft_vec.h"
+
+void **ft_vecunwrap(t_ftvec *vec)
+{
+ void **tmp;
+
+ tmp = vec->data;
+ free(vec);
+ return (tmp);
+}