SRCDIR = .
# SOURCES = $(addprefix $(SRCDIR)/, ft_putchar.c ft_putstr.c ft_strcmp.c ft_strlen.c ft_swap.c)
SOURCES = $(shell find $(SRCDIR) -name "*.c")
+BONUS = $(shell find $(SRCDIR) -name "*lst*.c")
+TEMP := $(SOURCES)
+SOURCES = $(filter-out $(BONUS), $(TEMP))
OBJECTS = $(SOURCES:.c=.o)
+BONUS_OBJECTS = $(BONUS:.c=.o)
NAME = libft.a
$(CC) $(CFLAGS) -o $@ -c $< -I $(INCDIR)
clean :
- $(RM) $(OBJECTS)
+ $(RM) $(OBJECTS) $(BONUS_OBJECTS)
fclean : clean
$(RM) $(NAME)
re : fclean
$(MAKE) all
+
+#bonus : CFLAGS += -DBONUS
+bonus : $(OBJECTS) $(BONUS_OBJECTS)
+ $(AR) rcs $(NAME) $(OBJECTS) $(BONUS_OBJECTS)
--- /dev/null
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_lstadd_back.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: ljiriste <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2023/08/16 13:33:28 by ljiriste #+# #+# */
+/* Updated: 2023/08/16 16:52:43 by ljiriste ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include <stddef.h>
+#include "libft.h"
+
+void ft_lstadd_back(t_list **lst, t_list *new)
+{
+ if (*lst == NULL)
+ {
+ *lst = new;
+ return ;
+ }
+ ft_lstlast(*lst)->next = new;
+ return ;
+}
--- /dev/null
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_lstadd_front.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: ljiriste <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2023/08/16 13:26:20 by ljiriste #+# #+# */
+/* Updated: 2023/08/16 13:42:49 by ljiriste ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "libft.h"
+
+void ft_lstadd_front(t_list **lst, t_list *new)
+{
+ new->next = *lst;
+ *lst = new;
+ return ;
+}
--- /dev/null
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_lstclear.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: ljiriste <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2023/08/16 13:45:28 by ljiriste #+# #+# */
+/* Updated: 2023/08/16 16:48:58 by ljiriste ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include <stdlib.h>
+#include "libft.h"
+
+void ft_lstclear(t_list **lst, void (*del)(void *))
+{
+ t_list *temp;
+
+ while (*lst)
+ {
+ temp = (*lst)->next;
+ ft_lstdelone(*lst, del);
+ *lst = temp;
+ }
+ return ;
+}
--- /dev/null
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_lstdelone.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: ljiriste <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2023/08/16 13:43:02 by ljiriste #+# #+# */
+/* Updated: 2023/08/16 13:46:37 by ljiriste ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include <stdlib.h>
+#include "libft.h"
+
+void ft_lstdelone(t_list *lst, void (*del)(void *))
+{
+ del(lst->content);
+ free(lst);
+ return ;
+}
--- /dev/null
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_lstiter.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: ljiriste <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2023/08/16 13:50:31 by ljiriste #+# #+# */
+/* Updated: 2023/08/16 13:51:48 by ljiriste ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "libft.h"
+
+void ft_lstiter(t_list *lst, void (*f)(void *))
+{
+ while (lst)
+ {
+ f(lst->content);
+ lst = lst->next;
+ }
+ return ;
+}
--- /dev/null
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_lstlast.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: ljiriste <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2023/08/16 13:31:01 by ljiriste #+# #+# */
+/* Updated: 2023/08/16 17:14:03 by ljiriste ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include <stddef.h>
+#include "libft.h"
+
+t_list *ft_lstlast(t_list *lst)
+{
+ if (lst == NULL)
+ return (lst);
+ while (lst->next)
+ lst = lst->next;
+ return (lst);
+}
--- /dev/null
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_lstmap.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: ljiriste <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2023/08/16 13:51:57 by ljiriste #+# #+# */
+/* Updated: 2023/08/16 16:58:41 by ljiriste ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include <stdlib.h>
+#include "libft.h"
+
+static t_list *first_el(t_list *lst, void *(*f)(void *), void (*del)(void *))
+{
+ t_list *res;
+ void *cont;
+
+ if (lst == NULL)
+ return (NULL);
+ cont = f(lst->content);
+ res = ft_lstnew(cont);
+ if (res == NULL)
+ del(cont);
+ return (res);
+}
+
+t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *))
+{
+ t_list *res;
+ t_list *new_node;
+ void *new_cont;
+
+ res = first_el(lst, f, del);
+ if (res == NULL)
+ return (res);
+ new_node = res;
+ lst = lst->next;
+ while (lst && res)
+ {
+ new_cont = f(lst->content);
+ new_node->next = ft_lstnew(new_cont);
+ new_node = new_node->next;
+ if (new_node == NULL)
+ {
+ del(new_cont);
+ ft_lstclear(&res, del);
+ }
+ lst = lst->next;
+ }
+ return (res);
+}
--- /dev/null
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_lstnew.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: ljiriste <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2023/08/16 13:23:00 by ljiriste #+# #+# */
+/* Updated: 2023/08/16 13:26:10 by ljiriste ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include <stdlib.h>
+#include "libft.h"
+
+t_list *ft_lstnew(void *content)
+{
+ t_list *res;
+
+ res = malloc(sizeof(t_list));
+ if (res == NULL)
+ return (res);
+ res->content = content;
+ res->next = NULL;
+ return (res);
+}
--- /dev/null
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_lstsize.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: ljiriste <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2023/08/16 13:28:58 by ljiriste #+# #+# */
+/* Updated: 2023/08/16 14:59:47 by ljiriste ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include <stddef.h>
+#include "libft.h"
+
+int ft_lstsize(t_list *lst)
+{
+ int res;
+
+ if (lst == NULL)
+ return (0);
+ res = 1;
+ while (lst->next)
+ {
+ lst = lst->next;
+ ++res;
+ }
+ return (res);
+}
/* By: ljiriste <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/08/15 12:58:15 by ljiriste #+# #+# */
-/* Updated: 2023/08/15 16:42:58 by ljiriste ### ########.fr */
+/* Updated: 2023/08/16 17:12:57 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
void ft_putendl_fd(char *s, int fd);
void ft_putnbr_fd(int n, int fd);
+//# ifdef BONUS
+
+typedef struct s_list
+{
+ void *content;
+ struct s_list *next;
+} t_list;
+
+t_list *ft_lstnew(void *content);
+void ft_lstadd_front(t_list **lst, t_list *new);
+int ft_lstsize(t_list *lst);
+t_list *ft_lstlast(t_list *lst);
+void ft_lstadd_back(t_list **lst, 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)(void *));
+t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *));
+
+//# endif
+
#endif