aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ft_lstadd_back.c15
-rw-r--r--src/ft_lstadd_front.c8
-rw-r--r--src/ft_lstclear.c19
-rw-r--r--src/ft_lstdelone.c9
-rw-r--r--src/ft_lstiter.c11
-rw-r--r--src/ft_lstlast.c11
-rw-r--r--src/ft_lstmap.c26
-rw-r--r--src/ft_lstnew.c15
-rw-r--r--src/ft_lstsize.c15
-rw-r--r--src/ft_split.c1
10 files changed, 130 insertions, 0 deletions
diff --git a/src/ft_lstadd_back.c b/src/ft_lstadd_back.c
new file mode 100644
index 0000000..076cae9
--- /dev/null
+++ b/src/ft_lstadd_back.c
@@ -0,0 +1,15 @@
+#include "libft.h"
+
+void
+ft_lstadd_back (t_list **lst, t_list *new)
+{
+ t_list *last;
+
+ if (!*lst)
+ {
+ *lst = new;
+ return;
+ }
+ last = ft_lstlast (*lst);
+ last->next = new;
+}
diff --git a/src/ft_lstadd_front.c b/src/ft_lstadd_front.c
new file mode 100644
index 0000000..e689412
--- /dev/null
+++ b/src/ft_lstadd_front.c
@@ -0,0 +1,8 @@
+#include "libft.h"
+
+void
+ft_lstadd_front (t_list **lst, t_list *new)
+{
+ new->next = *lst;
+ *lst = new;
+}
diff --git a/src/ft_lstclear.c b/src/ft_lstclear.c
new file mode 100644
index 0000000..4c738b7
--- /dev/null
+++ b/src/ft_lstclear.c
@@ -0,0 +1,19 @@
+#include "libft.h"
+#include <stdlib.h>
+
+void
+ft_lstclear (t_list **lst, void (*del) (void *))
+{
+ t_list *cur;
+ t_list *next;
+
+ cur = *lst;
+ while (cur)
+ {
+ next = cur->next;
+ del (cur->content);
+ free (cur);
+ cur = next;
+ }
+ *lst = NULL;
+}
diff --git a/src/ft_lstdelone.c b/src/ft_lstdelone.c
new file mode 100644
index 0000000..1fe570f
--- /dev/null
+++ b/src/ft_lstdelone.c
@@ -0,0 +1,9 @@
+#include "libft.h"
+#include <stdlib.h>
+
+void
+ft_lstdelone (t_list *lst, void (*del) (void *))
+{
+ del (lst->content);
+ free (lst);
+}
diff --git a/src/ft_lstiter.c b/src/ft_lstiter.c
new file mode 100644
index 0000000..84fc000
--- /dev/null
+++ b/src/ft_lstiter.c
@@ -0,0 +1,11 @@
+#include "libft.h"
+
+void
+ft_lstiter (t_list *lst, void (*f) (void *))
+{
+ while (lst)
+ {
+ f (lst->content);
+ lst = lst->next;
+ }
+}
diff --git a/src/ft_lstlast.c b/src/ft_lstlast.c
new file mode 100644
index 0000000..68b6337
--- /dev/null
+++ b/src/ft_lstlast.c
@@ -0,0 +1,11 @@
+#include "libft.h"
+
+t_list *
+ft_lstlast (t_list *lst)
+{
+ if (!lst)
+ return (NULL);
+ while (lst->next)
+ lst = lst->next;
+ return (lst);
+}
diff --git a/src/ft_lstmap.c b/src/ft_lstmap.c
new file mode 100644
index 0000000..c001a2d
--- /dev/null
+++ b/src/ft_lstmap.c
@@ -0,0 +1,26 @@
+#include "libft.h"
+#include <stdlib.h>
+
+t_list *
+ft_lstmap (t_list *lst, void *(*f) (void *), void (*del) (void *))
+{
+ t_list *new_list;
+ t_list *node;
+ void *content;
+
+ new_list = NULL;
+ while (lst)
+ {
+ content = f (lst->content);
+ node = ft_lstnew (content);
+ if (!node)
+ {
+ del (content);
+ ft_lstclear (&new_list, del);
+ return (NULL);
+ }
+ ft_lstadd_back (&new_list, node);
+ lst = lst->next;
+ }
+ return (new_list);
+}
diff --git a/src/ft_lstnew.c b/src/ft_lstnew.c
new file mode 100644
index 0000000..37412b4
--- /dev/null
+++ b/src/ft_lstnew.c
@@ -0,0 +1,15 @@
+#include "libft.h"
+#include <stdlib.h>
+
+t_list *
+ft_lstnew (void *content)
+{
+ t_list *node;
+
+ node = malloc (sizeof (t_list));
+ if (!node)
+ return (NULL);
+ node->content = content;
+ node->next = NULL;
+ return (node);
+}
diff --git a/src/ft_lstsize.c b/src/ft_lstsize.c
new file mode 100644
index 0000000..2986498
--- /dev/null
+++ b/src/ft_lstsize.c
@@ -0,0 +1,15 @@
+#include "libft.h"
+
+int
+ft_lstsize (t_list *lst)
+{
+ int count;
+
+ count = 0;
+ while (lst)
+ {
+ count++;
+ lst = lst->next;
+ }
+ return (count);
+}
diff --git a/src/ft_split.c b/src/ft_split.c
index bb51c85..966ce5f 100644
--- a/src/ft_split.c
+++ b/src/ft_split.c
@@ -21,6 +21,7 @@ _s_count_words (char const *s, char c)
return (count);
}
+/** Free the first @p n elements of @p arr, then @p arr itself. */
static void
_s_free_all (char **arr, size_t n)
{