diff --git a/ft_lstadd_back.c b/ft_lstadd_back.c new file mode 100644 index 0000000..9856d5d --- /dev/null +++ b/ft_lstadd_back.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstadd_back.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dgaillet +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/11/09 15:06:49 by dgaillet #+# #+# */ +/* Updated: 2025/11/09 15:21:07 by dgaillet ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lstadd_back(t_list **lst, t_list *new) +{ + t_list *temp; + + if (!(*lst)) + { + *lst = new; + return ; + } + temp = *lst; + while (temp->next) + temp = temp->next; + temp->next = new; +} diff --git a/ft_lstadd_front.c b/ft_lstadd_front.c new file mode 100644 index 0000000..b24ee6e --- /dev/null +++ b/ft_lstadd_front.c @@ -0,0 +1,19 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstadd_front.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dgaillet +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/11/09 14:36:17 by dgaillet #+# #+# */ +/* Updated: 2025/11/09 14:42:44 by dgaillet ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lstadd_front(t_list **lst, t_list *new) +{ + new->next = *lst; + *lst = new; +} diff --git a/ft_lstclear.c b/ft_lstclear.c new file mode 100644 index 0000000..ce187da --- /dev/null +++ b/ft_lstclear.c @@ -0,0 +1,34 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstclear.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dgaillet +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/11/09 15:31:17 by dgaillet #+# #+# */ +/* Updated: 2025/11/09 15:50:53 by dgaillet ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lstclear(t_list **lst, void (*del)(void *)) +{ + t_list *temp; + t_list *next; + + if (!*lst) + return ; + temp = *lst; + next = temp->next; + while (next) + { + del(temp->content); + free(temp); + temp = next; + next = temp->next; + } + del(temp->content); + free(temp); + *lst = NULL; +} diff --git a/ft_lstdelone.c b/ft_lstdelone.c new file mode 100644 index 0000000..4349fd2 --- /dev/null +++ b/ft_lstdelone.c @@ -0,0 +1,19 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstdelone.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dgaillet +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/11/09 15:22:02 by dgaillet #+# #+# */ +/* Updated: 2025/11/09 15:29:56 by dgaillet ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lstdelone(t_list *lst, void (*del)(void *)) +{ + del(lst->content); + free(lst); +} diff --git a/ft_lstiter.c b/ft_lstiter.c new file mode 100644 index 0000000..6d889a7 --- /dev/null +++ b/ft_lstiter.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstiter.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dgaillet +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/11/09 15:51:31 by dgaillet #+# #+# */ +/* Updated: 2025/11/09 15:53:12 by dgaillet ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_lstiter(t_list *lst, void (*f)(void *)) +{ + while (lst) + { + f(lst->content); + lst = lst->next; + } +} diff --git a/ft_lstlast.c b/ft_lstlast.c new file mode 100644 index 0000000..f404e4a --- /dev/null +++ b/ft_lstlast.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstlast.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dgaillet +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/11/09 15:03:19 by dgaillet #+# #+# */ +/* Updated: 2025/11/09 15:04:58 by dgaillet ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +#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/ft_lstmap.c b/ft_lstmap.c new file mode 100644 index 0000000..855df27 --- /dev/null +++ b/ft_lstmap.c @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstmap.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dgaillet +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/11/09 15:54:38 by dgaillet #+# #+# */ +/* Updated: 2025/11/09 16:42:23 by dgaillet ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *)) +{ + t_list *new_lst; + t_list *temp; + + if (!lst) + return (NULL); + new_lst = NULL; + while (lst) + { + temp = ft_lstnew(f(lst->content)); + if (!temp) + { + ft_lstclear(&new_lst, del); + return (NULL); + } + ft_lstadd_back(&new_lst, temp); + lst = lst->next; + } + return (new_lst); +} diff --git a/ft_lstnew.c b/ft_lstnew.c new file mode 100644 index 0000000..1c357aa --- /dev/null +++ b/ft_lstnew.c @@ -0,0 +1,25 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstnew.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dgaillet +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/11/09 14:27:21 by dgaillet #+# #+# */ +/* Updated: 2025/11/09 14:29:59 by dgaillet ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +t_list *ft_lstnew(void *content) +{ + t_list *new_lst; + + new_lst = malloc(sizeof(t_list)); + if (!new_lst) + return (NULL); + new_lst->content = content; + new_lst->next = NULL; + return (new_lst); +} diff --git a/ft_lstsize.c b/ft_lstsize.c new file mode 100644 index 0000000..2d2707d --- /dev/null +++ b/ft_lstsize.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstsize.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dgaillet +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/11/09 14:43:22 by dgaillet #+# #+# */ +/* Updated: 2025/11/09 15:02:46 by dgaillet ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_lstsize(t_list *lst) +{ + int i; + + if (!lst) + return (0); + i = 1; + while (lst->next) + { + lst = lst->next; + i++; + } + return (i); +}