]> git.dkaiser.de - 42/libft.git/commitdiff
Bonus
authorDominik Kaiser <dkaiser@1-C-7.42heilbronn.de>
Sun, 10 Mar 2024 18:10:22 +0000 (19:10 +0100)
committerDominik Kaiser <dkaiser@1-C-7.42heilbronn.de>
Sun, 10 Mar 2024 18:10:22 +0000 (19:10 +0100)
15 files changed:
Makefile
ft_calloc.c
ft_lstadd_back_bonus.c [new file with mode: 0644]
ft_lstadd_front_bonus.c [new file with mode: 0644]
ft_lstclear_bonus.c [new file with mode: 0644]
ft_lstdelone_bonus.c [new file with mode: 0644]
ft_lstiter_bonus.c [new file with mode: 0644]
ft_lstlast_bonus.c [new file with mode: 0644]
ft_lstmap_bonus.c [new file with mode: 0644]
ft_lstnew_bonus.c [new file with mode: 0644]
ft_lstsize_bonus.c [new file with mode: 0644]
ft_strdup.c
ft_strnstr.c
ft_substr.c
libft.h

index 8759efa7cebe8d3ede56e0ee21345cc2106d02a0..1fdbab6739bf5cca73776b744c7b9e8ae8c2a00c 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -37,8 +37,20 @@ SRC_FILES = ft_atoi.c \
                        ft_tolower.c \
                        ft_toupper.c \
 
+
 OBJ_FILES = $(SRC_FILES:.c=.o)
 
+BONUS_SRC = ft_lstnew_bonus.c \
+                       ft_lstadd_front_bonus.c \
+                       ft_lstsize_bonus.c \
+                       ft_lstlast_bonus.c \
+                       ft_lstadd_back_bonus.c \
+                       ft_lstdelone_bonus.c \
+                       ft_lstclear_bonus.c \
+                       ft_lstiter_bonus.c \
+                       ft_lstmap_bonus.c
+
+BONUS_OBJ = $(BONUS_SRC:.c=.o)
 
 all: $(NAME)
 
@@ -49,6 +61,9 @@ clean:
        rm -f $(OBJ_FILES)
 
 fclean: clean
-       -rm -f $(NAME)
+       rm -f $(NAME)
 
 re: fclean all
+
+bonus: $(BONUS_OBJ)
+       ar rcs $(NAME) $(BONUS_OBJ)
index 2b711d957707637c6d576ff5cd78c0f1ef7c2a4a..0dcc434b26a35b0d7a84a5c5d8bc3c8cbc475086 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: dkaiser <dkaiser@student.42heilbronn.de    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2024/03/06 19:45:56 by dkaiser           #+#    #+#             */
-/*   Updated: 2024/03/10 13:17:31 by dkaiser          ###   ########.fr       */
+/*   Updated: 2024/03/10 15:34:06 by dkaiser          ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
 void   *ft_calloc(size_t count, size_t size)
 {
        void    *result;
-       size_t  i;
 
        result = malloc(count * size);
        if (result)
-       {
-               i = 0;
-               while (i < count * size)
-               {
-                       *((char *)result + i) = 0;
-                       i++;
-               }
-       }
+               ft_bzero(result, count * size);
        return (result);
 }
diff --git a/ft_lstadd_back_bonus.c b/ft_lstadd_back_bonus.c
new file mode 100644 (file)
index 0000000..c4fb686
--- /dev/null
@@ -0,0 +1,30 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   ft_lstadd_back_bonus.c                             :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: dkaiser <dkaiser@student.42heilbronn.de    +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   Created: 2024/03/10 16:03:26 by dkaiser           #+#    #+#             */
+/*   Updated: 2024/03/10 18:00:17 by dkaiser          ###   ########.fr       */
+/*                                                                            */
+/* ************************************************************************** */
+
+#include "libft.h"
+
+void   ft_lstadd_back(t_list **lst, t_list *new)
+{
+       t_list  *current;
+
+       if (!*lst)
+       {
+               *lst = new;
+               return ;
+       }
+       current = *lst;
+       while (current->next)
+       {
+               current = current->next;
+       }
+       current->next = new;
+}
diff --git a/ft_lstadd_front_bonus.c b/ft_lstadd_front_bonus.c
new file mode 100644 (file)
index 0000000..9c4c30e
--- /dev/null
@@ -0,0 +1,19 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   ft_lstadd_front_bonus.c                            :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: dkaiser <dkaiser@student.42heilbronn.de    +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   Created: 2024/03/10 15:14:01 by dkaiser           #+#    #+#             */
+/*   Updated: 2024/03/10 15:40:48 by dkaiser          ###   ########.fr       */
+/*                                                                            */
+/* ************************************************************************** */
+
+#include "libft.h"
+
+void   ft_lstadd_front(t_list **lst, t_list *new)
+{
+       new->next = *lst;
+       *lst = new;
+}
diff --git a/ft_lstclear_bonus.c b/ft_lstclear_bonus.c
new file mode 100644 (file)
index 0000000..9af095e
--- /dev/null
@@ -0,0 +1,32 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   ft_lstclear_bonus.c                                :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: dkaiser <dkaiser@student.42heilbronn.de    +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   Created: 2024/03/10 16:26:23 by dkaiser           #+#    #+#             */
+/*   Updated: 2024/03/10 16:35:46 by dkaiser          ###   ########.fr       */
+/*                                                                            */
+/* ************************************************************************** */
+
+#include "libft.h"
+
+void   ft_lstclear(t_list **lst, void (*del)(void *))
+{
+       t_list  *current;
+       t_list  *next;
+
+       if (*lst)
+       {
+               current = *lst;
+               while (current->next)
+               {
+                       next = current->next;
+                       ft_lstdelone(current, del);
+                       current = next;
+               }
+               ft_lstdelone(current, del);
+       }
+       *lst = NULL;
+}
diff --git a/ft_lstdelone_bonus.c b/ft_lstdelone_bonus.c
new file mode 100644 (file)
index 0000000..9dd78c8
--- /dev/null
@@ -0,0 +1,19 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   ft_lstdelone_bonus.c                               :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: dkaiser <dkaiser@student.42heilbronn.de    +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   Created: 2024/03/10 16:20:31 by dkaiser           #+#    #+#             */
+/*   Updated: 2024/03/10 16:36:18 by dkaiser          ###   ########.fr       */
+/*                                                                            */
+/* ************************************************************************** */
+
+#include "libft.h"
+
+void   ft_lstdelone(t_list *lst, void (*del)(void *))
+{
+       del(lst->content);
+       free(lst);
+}
diff --git a/ft_lstiter_bonus.c b/ft_lstiter_bonus.c
new file mode 100644 (file)
index 0000000..73efbe9
--- /dev/null
@@ -0,0 +1,25 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   ft_lstiter_bonus.c                                 :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: dkaiser <dkaiser@student.42heilbronn.de    +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   Created: 2024/03/10 16:39:47 by dkaiser           #+#    #+#             */
+/*   Updated: 2024/03/10 16:41:07 by dkaiser          ###   ########.fr       */
+/*                                                                            */
+/* ************************************************************************** */
+
+#include "libft.h"
+
+void   ft_lstiter(t_list *lst, void (*f)(void *))
+{
+       if (!lst)
+               return ;
+       while (lst->next)
+       {
+               f(lst->content);
+               lst = lst->next;
+       }
+       f(lst->content);
+}
diff --git a/ft_lstlast_bonus.c b/ft_lstlast_bonus.c
new file mode 100644 (file)
index 0000000..e0b4d6d
--- /dev/null
@@ -0,0 +1,22 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   ft_lstlast_bonus.c                                 :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: dkaiser <dkaiser@student.42heilbronn.de    +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   Created: 2024/03/10 15:54:05 by dkaiser           #+#    #+#             */
+/*   Updated: 2024/03/10 16:36:04 by dkaiser          ###   ########.fr       */
+/*                                                                            */
+/* ************************************************************************** */
+
+#include "libft.h"
+
+t_list *ft_lstlast(t_list *lst)
+{
+       if (!lst)
+               return (0);
+       while (lst->next)
+               lst = lst->next;
+       return (lst);
+}
diff --git a/ft_lstmap_bonus.c b/ft_lstmap_bonus.c
new file mode 100644 (file)
index 0000000..91eabfc
--- /dev/null
@@ -0,0 +1,43 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   ft_lstmap_bonus.c                                  :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: dkaiser <dkaiser@student.42heilbronn.de    +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   Created: 2024/03/10 16:45:21 by dkaiser           #+#    #+#             */
+/*   Updated: 2024/03/10 19:03:00 by dkaiser          ###   ########.fr       */
+/*                                                                            */
+/* ************************************************************************** */
+
+#include "libft.h"
+
+t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *))
+{
+       t_list  *result;
+       t_list  *new;
+
+       if (!lst || !f || !del)
+               return (NULL);
+       new = ft_lstnew(f(lst->content));
+       if (!new)
+       {
+               free(new);
+               return (NULL);
+       }
+       result = new;
+       lst = lst->next;
+       while (lst)
+       {
+               new->next = ft_lstnew(f(lst->content));
+               if (!new->next)
+               {
+                       ft_lstclear(&new, del);
+                       return (NULL);
+               }
+               new = new->next;
+               lst = lst->next;
+       }
+       // new->next = NULL;
+       return (result);
+}
diff --git a/ft_lstnew_bonus.c b/ft_lstnew_bonus.c
new file mode 100644 (file)
index 0000000..a8f43ce
--- /dev/null
@@ -0,0 +1,34 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   ft_lstnew_bonus.c                                  :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: dkaiser <dkaiser@student.42heilbronn.de    +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   Created: 2024/03/10 14:57:39 by dkaiser           #+#    #+#             */
+/*   Updated: 2024/03/10 15:40:57 by dkaiser          ###   ########.fr       */
+/*                                                                            */
+/* ************************************************************************** */
+
+#include "libft.h"
+
+t_list *ft_lstnew(void *content)
+{
+       t_list  *result;
+
+       result = malloc(sizeof(t_list));
+       if (!result)
+               return (0);
+       result->content = content;
+       result->next = NULL;
+       return (result);
+}
+
+/* #include <stdio.h> */
+/* int main() { */
+/*     t_list l; */
+/*     char s[] = "Hello"; */
+
+/*     l = *ft_lstnew(&s); */
+/*     printf("%s\n", l.content); */
+/* } */
diff --git a/ft_lstsize_bonus.c b/ft_lstsize_bonus.c
new file mode 100644 (file)
index 0000000..c91b0c9
--- /dev/null
@@ -0,0 +1,28 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   ft_lstsize_bonus.c                                 :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: dkaiser <dkaiser@student.42heilbronn.de    +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   Created: 2024/03/10 15:35:38 by dkaiser           #+#    #+#             */
+/*   Updated: 2024/03/10 16:36:09 by dkaiser          ###   ########.fr       */
+/*                                                                            */
+/* ************************************************************************** */
+
+#include "libft.h"
+
+int    ft_lstsize(t_list *lst)
+{
+       int     len;
+
+       if (!lst)
+               return (0);
+       len = 1;
+       while (lst->next)
+       {
+               lst = lst->next;
+               len++;
+       }
+       return (len);
+}
index 2f5916645101cdc81536ae389f12c8dd0e6041cf..c7a6591f183f8861bf684e6a8130080edcc0fc5b 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: dkaiser <dkaiser@student.42heilbronn.de    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2024/03/06 19:54:16 by dkaiser           #+#    #+#             */
-/*   Updated: 2024/03/10 13:59:13 by dkaiser          ###   ########.fr       */
+/*   Updated: 2024/03/10 15:28:58 by dkaiser          ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -22,7 +22,7 @@ char  *ft_strdup(const char *s1)
        if (!result)
                return (0);
        result[len] = '\0';
-       while (--len)
+       while (len--)
                result[len] = s1[len];
        return (result);
 }
index 54868d43eeb7142a4a3f71fdadb934e8a268bb18..453af188df6e302148557404fdcf147e4adee0b8 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: dkaiser <dkaiser@student.42heilbronn.de    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2024/03/06 16:07:54 by dkaiser           #+#    #+#             */
-/*   Updated: 2024/03/10 13:16:58 by dkaiser          ###   ########.fr       */
+/*   Updated: 2024/03/10 14:42:21 by dkaiser          ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -17,7 +17,7 @@ char  *ft_strnstr(const char *haystack, const char *needle, size_t len)
        size_t  i;
        size_t  k;
 
-       if (len < 0 || (!haystack[0] && needle[0]))
+       if (len < 0 || (!*haystack && *needle))
                return (0);
        i = 0;
        if (*needle == '\0' || needle == haystack)
@@ -26,9 +26,7 @@ char  *ft_strnstr(const char *haystack, const char *needle, size_t len)
        {
                k = 0;
                while (haystack[i + k] && haystack[i + k] == needle[k] && i + k < len)
-               {
                        k++;
-               }
                if (!needle[k])
                        return ((char *)haystack + i);
                i++;
index 4ac80030eb49de967448b4a322fb782bbcf79e5d..81ca8c6b1663c571918a2d480290f06ad1cfb1bc 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: dkaiser <dkaiser@student.42heilbronn.de    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2024/03/06 21:58:31 by dkaiser           #+#    #+#             */
-/*   Updated: 2024/03/10 14:01:27 by dkaiser          ###   ########.fr       */
+/*   Updated: 2024/03/10 15:39:38 by dkaiser          ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -14,9 +14,9 @@
 
 char   *ft_substr(char const *s, unsigned int start, size_t len)
 {
-       unsigned int slen;
-       size_t i;
-       char    *result;
+       unsigned int    slen;
+       size_t                  i;
+       char                    *result;
 
        slen = ft_strlen(s);
        if (start >= slen)
diff --git a/libft.h b/libft.h
index e646b9e4a59503e09f1b129b82952bb244e8a9b8..1256bdc58c84821f8c2a2c15e48b4abf103c1368 100644 (file)
--- a/libft.h
+++ b/libft.h
@@ -5,8 +5,8 @@
 /*                                                    +:+ +:+         +:+     */
 /*   By: dkaiser <dkaiser@student.42heilbronn.de    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
-/*   Created: 2024/03/06 21:38:24 by dkaiser           #+#    #+#             */
-/*   Updated: 2024/03/10 13:26:25 by dkaiser          ###   ########.fr       */
+/*   Created: 2024/03/10 16:37:54 by dkaiser           #+#    #+#             */
+/*   Updated: 2024/03/10 17:17:50 by dkaiser          ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
 # include <string.h>
 # include <unistd.h>
 
-int            ft_isalpha(int c);
-int            ft_isdigit(int c);
-int            ft_isalnum(int c);
-int            ft_isprint(int c);
-int            ft_isascii(int c);
-int            ft_strlen(const char *str);
-void   *ft_memset(void *b, int c, size_t len);
-void   ft_bzero(void *s, size_t n);
-void   *ft_memcpy(void *dst, const void *src, size_t n);
-void   *ft_memmove(void *dst, const void *src, size_t len);
-size_t ft_strlcpy(char *dst, const char *src, size_t dstsize);
-size_t ft_strlcat(char *dst, const char *src, size_t dstsize);
-int            ft_toupper(int c);
-int            ft_tolower(int c);
-char   *ft_strchr(const char *s, int c);
-char   *ft_strrchr(const char *s, int c);
-int            ft_strncmp(const char *s1, const char *s2, size_t n);
-void   *ft_memchr(const void *s, int c, size_t n);
-int            ft_memcmp(const void *s1, const void *s2, size_t n);
-char   *ft_strnstr(const char *haystack, const char *needle, size_t len);
-int            ft_atoi(const char *str);
-void   *ft_calloc(size_t count, size_t size);
-char   *ft_strdup(const char *s1);
-char   *ft_substr(char const *s, unsigned int start, size_t len);
-char   *ft_strjoin(char const *s1, char const *s2);
-char   *ft_strtrim(char const *s1, char const *set);
-char   **ft_split(char const *s, char c);
-char   *ft_itoa(int n);
-char   *ft_strmapi(char const *s, char (*f)(unsigned int, char));
-void   ft_striteri(char *s, void (*f)(unsigned int, char *));
-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);
+int                                    ft_isalpha(int c);
+int                                    ft_isdigit(int c);
+int                                    ft_isalnum(int c);
+int                                    ft_isprint(int c);
+int                                    ft_isascii(int c);
+int                                    ft_strlen(const char *str);
+void                           *ft_memset(void *b, int c, size_t len);
+void                           ft_bzero(void *s, size_t n);
+void                           *ft_memcpy(void *dst, const void *src, size_t n);
+void                           *ft_memmove(void *dst, const void *src, size_t len);
+size_t                         ft_strlcpy(char *dst, const char *src, size_t dstsize);
+size_t                         ft_strlcat(char *dst, const char *src, size_t dstsize);
+int                                    ft_toupper(int c);
+int                                    ft_tolower(int c);
+char                           *ft_strchr(const char *s, int c);
+char                           *ft_strrchr(const char *s, int c);
+int                                    ft_strncmp(const char *s1, const char *s2, size_t n);
+void                           *ft_memchr(const void *s, int c, size_t n);
+int                                    ft_memcmp(const void *s1, const void *s2, size_t n);
+char                           *ft_strnstr(const char *haystack, const char *needle,
+                                               size_t len);
+int                                    ft_atoi(const char *str);
+void                           *ft_calloc(size_t count, size_t size);
+char                           *ft_strdup(const char *s1);
+char                           *ft_substr(char const *s, unsigned int start, size_t len);
+char                           *ft_strjoin(char const *s1, char const *s2);
+char                           *ft_strtrim(char const *s1, char const *set);
+char                           **ft_split(char const *s, char c);
+char                           *ft_itoa(int n);
+char                           *ft_strmapi(char const *s, char (*f)(unsigned int, char));
+void                           ft_striteri(char *s, void (*f)(unsigned int, char *));
+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);
+
+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