summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile17
-rw-r--r--ft_calloc.c12
-rw-r--r--ft_lstadd_back_bonus.c30
-rw-r--r--ft_lstadd_front_bonus.c19
-rw-r--r--ft_lstclear_bonus.c32
-rw-r--r--ft_lstdelone_bonus.c19
-rw-r--r--ft_lstiter_bonus.c25
-rw-r--r--ft_lstlast_bonus.c22
-rw-r--r--ft_lstmap_bonus.c43
-rw-r--r--ft_lstnew_bonus.c34
-rw-r--r--ft_lstsize_bonus.c28
-rw-r--r--ft_strdup.c4
-rw-r--r--ft_strnstr.c6
-rw-r--r--ft_substr.c8
-rw-r--r--libft.h89
15 files changed, 331 insertions, 57 deletions
diff --git a/Makefile b/Makefile
index 8759efa..1fdbab6 100644
--- 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)
diff --git a/ft_calloc.c b/ft_calloc.c
index 2b711d9..0dcc434 100644
--- a/ft_calloc.c
+++ b/ft_calloc.c
@@ -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 */
/* */
/* ************************************************************************** */
@@ -15,17 +15,9 @@
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
index 0000000..c4fb686
--- /dev/null
+++ b/ft_lstadd_back_bonus.c
@@ -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
index 0000000..9c4c30e
--- /dev/null
+++ b/ft_lstadd_front_bonus.c
@@ -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
index 0000000..9af095e
--- /dev/null
+++ b/ft_lstclear_bonus.c
@@ -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
index 0000000..9dd78c8
--- /dev/null
+++ b/ft_lstdelone_bonus.c
@@ -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
index 0000000..73efbe9
--- /dev/null
+++ b/ft_lstiter_bonus.c
@@ -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
index 0000000..e0b4d6d
--- /dev/null
+++ b/ft_lstlast_bonus.c
@@ -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
index 0000000..91eabfc
--- /dev/null
+++ b/ft_lstmap_bonus.c
@@ -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
index 0000000..a8f43ce
--- /dev/null
+++ b/ft_lstnew_bonus.c
@@ -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
index 0000000..c91b0c9
--- /dev/null
+++ b/ft_lstsize_bonus.c
@@ -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);
+}
diff --git a/ft_strdup.c b/ft_strdup.c
index 2f59166..c7a6591 100644
--- a/ft_strdup.c
+++ b/ft_strdup.c
@@ -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);
}
diff --git a/ft_strnstr.c b/ft_strnstr.c
index 54868d4..453af18 100644
--- a/ft_strnstr.c
+++ b/ft_strnstr.c
@@ -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++;
diff --git a/ft_substr.c b/ft_substr.c
index 4ac8003..81ca8c6 100644
--- a/ft_substr.c
+++ b/ft_substr.c
@@ -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 e646b9e..1256bdc 100644
--- 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 */
/* */
/* ************************************************************************** */
@@ -17,38 +17,55 @@
# 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