aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2019-10-08 18:19:36 +0200
committerCharles <sircharlesaze@gmail.com>2019-10-08 18:19:36 +0200
commit4e2e8aac225f2a226573ae36e5327a8c4073bbbc (patch)
tree1946afb4965208899382464910ee1e4a78a65939
parentc73c541621f0567c511bbcac4a0bf40e116c53d7 (diff)
downloadlibft-4e2e8aac225f2a226573ae36e5327a8c4073bbbc.tar.gz
libft-4e2e8aac225f2a226573ae36e5327a8c4073bbbc.tar.bz2
libft-4e2e8aac225f2a226573ae36e5327a8c4073bbbc.zip
Added bonus functions WIP
-rw-r--r--ft_lstadd.c6
-rw-r--r--ft_lstadd_back.c17
-rw-r--r--ft_lstadd_front.c7
-rw-r--r--ft_lstclear.c15
-rw-r--r--ft_lstdel.c6
-rw-r--r--ft_lstdelone.c6
-rw-r--r--ft_lstiter.c8
-rw-r--r--ft_lstlast.c11
-rw-r--r--ft_lstmap.c13
-rw-r--r--ft_lstnew.c6
-rw-r--r--ft_lstsize.c15
-rw-r--r--libft.h14
12 files changed, 104 insertions, 20 deletions
diff --git a/ft_lstadd.c b/ft_lstadd.c
deleted file mode 100644
index 549b670..0000000
--- a/ft_lstadd.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include "libft.h"
-
-void ft_lstadd(t_list **alst, t_list *new)
-{
-
-}
diff --git a/ft_lstadd_back.c b/ft_lstadd_back.c
new file mode 100644
index 0000000..e2cbf2a
--- /dev/null
+++ b/ft_lstadd_back.c
@@ -0,0 +1,17 @@
+#include <stdlib.h>
+#include "libft.h"
+
+void ft_lstadd_back(t_list **alst, t_list *new)
+{
+ t_list *cursor;
+
+ if (*alst == NULL)
+ {
+ *alst = new;
+ return ;
+ }
+ cursor = *alst;
+ while (cursor->next != NULL)
+ cursor = cursor->next;
+ cursor->next = new;
+}
diff --git a/ft_lstadd_front.c b/ft_lstadd_front.c
new file mode 100644
index 0000000..4b1be2a
--- /dev/null
+++ b/ft_lstadd_front.c
@@ -0,0 +1,7 @@
+#include "libft.h"
+
+void ft_lstadd_front(t_list **alst, t_list *new)
+{
+ new->next = *alst;
+ *alst = new;
+}
diff --git a/ft_lstclear.c b/ft_lstclear.c
new file mode 100644
index 0000000..b944cda
--- /dev/null
+++ b/ft_lstclear.c
@@ -0,0 +1,15 @@
+#include <stdlib.h>
+#include "libft.h"
+
+void ft_lstclear(t_list **lst, void (*del)(void *))
+{
+ t_list *tmp;
+
+ while (*lst != NULL)
+ {
+ tmp = (*lst)->next;
+ (*del)((*lst)->content);
+ free(*lst);
+ *lst = tmp;
+ }
+}
diff --git a/ft_lstdel.c b/ft_lstdel.c
deleted file mode 100644
index 881a7b2..0000000
--- a/ft_lstdel.c
+++ /dev/null
@@ -1,6 +0,0 @@
-#include "libft.h"
-
-void ft_lstdel(t_list **alst, void (*del)(void *, size_t))
-{
-
-}
diff --git a/ft_lstdelone.c b/ft_lstdelone.c
index bf5f61e..4cc1106 100644
--- a/ft_lstdelone.c
+++ b/ft_lstdelone.c
@@ -1,6 +1,8 @@
+#include <stdlib.h>
#include "libft.h"
-void ft_lstdelone(t_list **alst, void (*del)(void *, size_t))
+void ft_lstdelone(t_list *lst, void (*del)(void *))
{
-
+ (*del)(lst->content);
+ free(lst);
}
diff --git a/ft_lstiter.c b/ft_lstiter.c
index ef19bf8..7eed34b 100644
--- a/ft_lstiter.c
+++ b/ft_lstiter.c
@@ -1,6 +1,10 @@
#include "libft.h"
-void ft_lstiter(t_list *lst, void (*f)(t_list *elem))
+void ft_lstiter(t_list *lst, void (*f)(t_list *))
{
-
+ while (lst != NULL)
+ {
+ (*f)(lst);
+ lst = lst->next;
+ }
}
diff --git a/ft_lstlast.c b/ft_lstlast.c
new file mode 100644
index 0000000..7442937
--- /dev/null
+++ b/ft_lstlast.c
@@ -0,0 +1,11 @@
+#include <stdlib.h>
+#include "libft.h"
+
+t_list *ft_lstlast(t_list *lst)
+{
+ if (lst == NULL)
+ return (NULL);
+ while (lst->next != NULL)
+ lst = lst->next;
+ return (lst);
+}
diff --git a/ft_lstmap.c b/ft_lstmap.c
index 7c1a89b..41a7e19 100644
--- a/ft_lstmap.c
+++ b/ft_lstmap.c
@@ -1,6 +1,17 @@
+#include <stdlib.h>
#include "libft.h"
-t_list * ft_lstmap(t_list *lst, t_list *(*f)(t_list *elem))
+t_list *ft_lstmap(t_list *lst, t_list *(*f)(t_list *))
{
+ t_list *mapped;
+ t_list *tmp;
+ while (lst != NULL)
+ {
+ tmp = ft_lstnew(lst->content);
+ tmp->next = lst->next;
+ tmp = (*f)(tmp);
+ ft_lstadd_back(&mapped, tmp);
+ }
+ return (mapped);
}
diff --git a/ft_lstnew.c b/ft_lstnew.c
index d4f53bc..01ab599 100644
--- a/ft_lstnew.c
+++ b/ft_lstnew.c
@@ -1,14 +1,14 @@
#include <stdlib.h>
#include "libft.h"
-t_list * ft_lstnew(void const *content, size_t content_size)
+t_list *ft_lstnew(void const *content)
{
t_list *elem;
if ((elem = (t_list*)malloc(sizeof(t_list))) == NULL)
return (NULL);
- elem->content = (void*)content;
- elem->content_size = content_size;
+ /* elem->content = (void*)content; */
+ (void)content;
elem->next = NULL;
return (elem);
}
diff --git a/ft_lstsize.c b/ft_lstsize.c
new file mode 100644
index 0000000..4324269
--- /dev/null
+++ b/ft_lstsize.c
@@ -0,0 +1,15 @@
+#include <stdlib.h>
+#include "libft.h"
+
+int ft_lstsize(t_list *lst)
+{
+ int counter;
+
+ counter = 0;
+ while (lst != NULL)
+ {
+ counter++;
+ lst = lst->next;
+ }
+ return (counter);
+}
diff --git a/libft.h b/libft.h
index e5d102c..84cc8c1 100644
--- a/libft.h
+++ b/libft.h
@@ -18,6 +18,12 @@
# define TRUE 1
# define FALSE 0
+typedef struct s_list
+{
+ void *content;
+ struct s_list *next;
+} t_list;
+
void *ft_memset(void *s, int c, size_t n);
void ft_bzero(void *s, size_t n);
void *ft_memcpy(void *dest, const void *src, size_t n);
@@ -71,5 +77,13 @@ void ft_putchar_fd(char c, int fd);
void ft_putstr_fd(char *s, int fd);
void ft_putendl_fd(char *s, int fd);
void ft_putnbr_fd(int n, int fd);
+t_list *ft_lstnew(void const *content);
+void ft_lstadd_front(t_list **alst, t_list *new);
+int ft_lstsize(t_list *lst);
+t_list *ft_lstlast(t_list *lst);
+void ft_lstadd_back(t_list **alst, t_list *new);
+void ft_lstdelone(t_list *lst, void (*del)(void *));
+void ft_lstclear(t_list **lst, void (*del)(void *));
+void ft_lstiter(t_list *lst, void (*f)(t_list *));
#endif