diff --git a/.gitignore b/.gitignore index a799c93..9d11296 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ build obj +.config \ No newline at end of file diff --git a/Makefile b/Makefile index ae81e54..3c0cd7c 100644 --- a/Makefile +++ b/Makefile @@ -17,6 +17,11 @@ TESTS_SRCS = $(wildcard $(TESTS_DIR)/*.c) TESTS_OBJS = $(patsubst $(TESTS_DIR)/%.c,$(OBJ_DIR)/%.test.o,$(TESTS_SRCS)) TESTS_BINS = $(patsubst $(TESTS_DIR)/%.c,$(BUILD_DIR)/%_test,$(TESTS_SRCS)) +# Flags for configuration +CONFIG_FLAGS := $(shell grep -E '^[a-zA-Z0-9_]+=' .config | sed 's/\([A-Za-z0-9_]*\)=y/-D\1=1/;s/\([A-Za-z0-9_]*\)=n/-D\1=0/') +CFLAGS += $(CONFIG_FLAGS) + + all: $(LIBRARY) $(OBJ_DIR) $(BUILD_DIR): @@ -59,3 +64,12 @@ fclean: clean re: fclean all .PHONY: all clean fclean re tests + +CONFIG_FILE := .config + +genconfig: + @echo -e " C\t${CONFIG_FILE}" + @echo "USE_SLIST=y" > $(CONFIG_FILE) + @echo "USE_DLIST=y" >> $(CONFIG_FILE) + @echo "USE_STACK=y" >> $(CONFIG_FILE) + diff --git a/hdrs/libft.h b/hdrs/libft.h index 842c72a..f572d16 100644 --- a/hdrs/libft.h +++ b/hdrs/libft.h @@ -1,7 +1,14 @@ #ifndef LIBFT_H -# define LIBFT_H - -# include +#define LIBFT_H +#include +#if DEBUG +#include +#define DEBUG_PRINT(fmt, ...) \ + fprintf(stderr, "[DEBUG] %s:%d:%s(): " fmt "\n", \ + __FILE__, __LINE__, __func__, ##__VA_ARGS__) +#else +#define DEBUG_PRINT(fmt, ...) ((void)0) +#endif void *ft_realloc(void *ptr, size_t old_size, size_t new_size); @@ -49,29 +56,30 @@ typedef struct s_string char *data; } t_string; -/* List */ -typedef struct s_list +/* Single Linked List */ +#if USE_SLIST +typedef struct s_slist { void *data; - struct s_list *next; -} t_list; + struct s_slist *next; +} t_slist; -/* List functions */ -t_list *ft_lstnew(void *data); -void ft_lstpush(t_list **lst, t_list *node); -void ft_lstunshift(t_list **lst, t_list *node); -t_list *ft_lstpop(t_list **lst); -t_list *ft_lstshift(t_list **lst); -int ft_lstsize(t_list *lst); -void ft_lstclear(t_list **lst); -void ft_lstreverse(t_list **lst); -int ft_lstempty(t_list *lst); -void ft_lstiter(t_list *lst, void (*f)(void *)); -void ft_lstrm(t_list **lst, void *data, int (*cmp)(void *, void *), void (*del)(void *)); -t_list *ft_lstfind(t_list *lst, void *data, int (*cmp)(void *, void *)); -int ft_lstinsert(t_list **lst, t_list *node, int index); -t_list *ft_lstget(t_list *lst, int index); +t_slist *ft_slist_new(void *data); +void ft_slist_push(t_slist **lst, t_slist *node); +void ft_slist_unshift(t_slist **lst, t_slist *node); +t_slist *ft_slist_pop(t_slist **lst); +t_slist *ft_slist_shift(t_slist **lst); +int ft_slist_size(t_slist *lst); +void ft_slist_clear(t_slist **lst); +void ft_slist_reverse(t_slist **lst); +int ft_slist_empty(t_slist *lst); +void ft_slist_iter(t_slist *lst, void (*f)(void *)); +void ft_slist_rm(t_slist **lst, void *data, int (*cmp)(void *, void *), void (*del)(void *)); +t_slist *ft_slist_find(t_slist *lst, void *data, int (*cmp)(void *, void *)); +int ft_slist_insert(t_slist **lst, t_slist *node, int index); +t_slist *ft_slist_get(t_slist *lst, int index); +#endif /* Vector */ typedef struct s_vec { diff --git a/srcs/lst/ft_lstempty.c b/srcs/lst/ft_lstempty.c deleted file mode 100644 index 84d5e21..0000000 --- a/srcs/lst/ft_lstempty.c +++ /dev/null @@ -1,6 +0,0 @@ -#include "libft.h" - -int ft_lstempty(t_list *lst) -{ - return (lst == NULL); -} \ No newline at end of file diff --git a/srcs/lst/ft_lstclear.c b/srcs/slist/ft_slist_clear.c similarity index 66% rename from srcs/lst/ft_lstclear.c rename to srcs/slist/ft_slist_clear.c index 5d736dd..71e8b17 100644 --- a/srcs/lst/ft_lstclear.c +++ b/srcs/slist/ft_slist_clear.c @@ -1,13 +1,15 @@ +#if USE_SLIST #include "libft.h" #include -void ft_lstclear(t_list **lst) +void ft_slist_clear(t_slist **lst) { - t_list *tmp; + t_slist *tmp; while (lst && *lst) { tmp = (*lst)->next; free(*lst); *lst = tmp; } -} \ No newline at end of file +} +#endif \ No newline at end of file diff --git a/srcs/slist/ft_slist_empty.c b/srcs/slist/ft_slist_empty.c new file mode 100644 index 0000000..cdcfa20 --- /dev/null +++ b/srcs/slist/ft_slist_empty.c @@ -0,0 +1,8 @@ +#if USE_SLIST +#include "libft.h" + +int ft_slist_empty(t_slist *lst) +{ + return (lst == NULL); +} +#endif \ No newline at end of file diff --git a/srcs/lst/ft_lstfind.c b/srcs/slist/ft_slist_find.c similarity index 61% rename from srcs/lst/ft_lstfind.c rename to srcs/slist/ft_slist_find.c index aff4f59..423bc94 100644 --- a/srcs/lst/ft_lstfind.c +++ b/srcs/slist/ft_slist_find.c @@ -1,6 +1,7 @@ +#if USE_SLIST #include "libft.h" -t_list *ft_lstfind(t_list *lst, void *data, int (*cmp)(void *, void *)) +t_slist *ft_slist_find(t_slist *lst, void *data, int (*cmp)(void *, void *)) { while (lst) { @@ -9,4 +10,5 @@ t_list *ft_lstfind(t_list *lst, void *data, int (*cmp)(void *, void *)) lst = lst->next; } return (NULL); -} \ No newline at end of file +} +#endif \ No newline at end of file diff --git a/srcs/lst/ft_lstget.c b/srcs/slist/ft_slist_get.c similarity index 70% rename from srcs/lst/ft_lstget.c rename to srcs/slist/ft_slist_get.c index f2f5dc1..af4bda8 100644 --- a/srcs/lst/ft_lstget.c +++ b/srcs/slist/ft_slist_get.c @@ -1,6 +1,7 @@ +#if USE_SLIST #include "libft.h" -t_list *ft_lstget(t_list *lst, int index) +t_slist *ft_slist_get(t_slist *lst, int index) { int i = 0; while (lst && i < index) @@ -10,3 +11,4 @@ t_list *ft_lstget(t_list *lst, int index) } return ((i == index) ? lst : NULL); } +#endif \ No newline at end of file diff --git a/srcs/lst/ft_lstinsert.c b/srcs/slist/ft_slist_insert.c similarity index 75% rename from srcs/lst/ft_lstinsert.c rename to srcs/slist/ft_slist_insert.c index dae06da..9286ac1 100644 --- a/srcs/lst/ft_lstinsert.c +++ b/srcs/slist/ft_slist_insert.c @@ -1,9 +1,10 @@ +#if USE_SLIST #include "libft.h" -int ft_lstinsert(t_list **lst, t_list *node, int index) +int ft_slist_insert(t_slist **lst, t_slist *node, int index) { - t_list *curr = *lst; - t_list *prev = NULL; + t_slist *curr = *lst; + t_slist *prev = NULL; int i = 0; if (index < 0 || !node) @@ -28,3 +29,4 @@ int ft_lstinsert(t_list **lst, t_list *node, int index) } return (-1); } +#endif \ No newline at end of file diff --git a/srcs/lst/ft_lstiter.c b/srcs/slist/ft_slist_iter.c similarity index 57% rename from srcs/lst/ft_lstiter.c rename to srcs/slist/ft_slist_iter.c index 4556347..ed64e52 100644 --- a/srcs/lst/ft_lstiter.c +++ b/srcs/slist/ft_slist_iter.c @@ -1,6 +1,7 @@ +#if USE_SLIST #include "libft.h" -void ft_lstiter(t_list *lst, void (*f)(void *)) +void ft_slist_iter(t_slist *lst, void (*f)(void *)) { while (lst) { @@ -8,3 +9,4 @@ void ft_lstiter(t_list *lst, void (*f)(void *)) lst = lst->next; } } +#endif \ No newline at end of file diff --git a/srcs/lst/ft_lstnew.c b/srcs/slist/ft_slist_new.c similarity index 52% rename from srcs/lst/ft_lstnew.c rename to srcs/slist/ft_slist_new.c index 37f210b..63ff49d 100644 --- a/srcs/lst/ft_lstnew.c +++ b/srcs/slist/ft_slist_new.c @@ -1,8 +1,9 @@ +#if USE_SLIST #include "libft.h" -t_list *ft_lstnew(void *data) +t_slist *ft_slist_new(void *data) { - t_list *node = (t_list *)malloc(sizeof(t_list)); + t_slist *node = (t_slist *)malloc(sizeof(t_slist)); if (!node) return (NULL); @@ -11,4 +12,5 @@ t_list *ft_lstnew(void *data) node->next = NULL; return node; -} \ No newline at end of file +} +#endif \ No newline at end of file diff --git a/srcs/lst/ft_lstpop.c b/srcs/slist/ft_slist_pop.c similarity index 76% rename from srcs/lst/ft_lstpop.c rename to srcs/slist/ft_slist_pop.c index 40dd665..a7bb9f6 100644 --- a/srcs/lst/ft_lstpop.c +++ b/srcs/slist/ft_slist_pop.c @@ -1,9 +1,10 @@ +#if USE_SLIST #include "libft.h" -t_list *ft_lstpop(t_list **lst) +t_slist *ft_list_pop(t_slist **lst) { - t_list *current; - t_list *prev; + t_slist *current; + t_slist *prev; if (!lst || !*lst) return NULL; @@ -21,3 +22,4 @@ t_list *ft_lstpop(t_list **lst) prev->next = NULL; return current; } +#endif \ No newline at end of file diff --git a/srcs/lst/ft_lstpush.c b/srcs/slist/ft_slist_push.c similarity index 75% rename from srcs/lst/ft_lstpush.c rename to srcs/slist/ft_slist_push.c index 1d87cf4..9e63ddd 100644 --- a/srcs/lst/ft_lstpush.c +++ b/srcs/slist/ft_slist_push.c @@ -1,8 +1,9 @@ +#if USE_SLIST #include "libft.h" -void ft_lstpush(t_list **lst, t_list *node) +void ft_slist_push(t_slist **lst, t_slist *node) { - t_list *current; + t_slist *current; if (!lst || !node) return; @@ -20,3 +21,4 @@ void ft_lstpush(t_list **lst, t_list *node) current = current->next; current->next = node; } +#endif \ No newline at end of file diff --git a/srcs/lst/ft_lstreverse.c b/srcs/slist/ft_slist_reverse.c similarity index 56% rename from srcs/lst/ft_lstreverse.c rename to srcs/slist/ft_slist_reverse.c index af8b57d..f5532f9 100644 --- a/srcs/lst/ft_lstreverse.c +++ b/srcs/slist/ft_slist_reverse.c @@ -1,10 +1,11 @@ +#if USE_SLIST #include "libft.h" -void ft_lstreverse(t_list **lst) +void ft_slist_reverse(t_slist **lst) { - t_list *prev = NULL; - t_list *curr = *lst; - t_list *next; + t_slist *prev = NULL; + t_slist *curr = *lst; + t_slist *next; while (curr) { @@ -15,3 +16,4 @@ void ft_lstreverse(t_list **lst) } *lst = prev; } +#endif \ No newline at end of file diff --git a/srcs/lst/ft_lstrm.c b/srcs/slist/ft_slist_rm.c similarity index 69% rename from srcs/lst/ft_lstrm.c rename to srcs/slist/ft_slist_rm.c index f129f75..86e6d18 100644 --- a/srcs/lst/ft_lstrm.c +++ b/srcs/slist/ft_slist_rm.c @@ -1,9 +1,10 @@ +#if USE_SLIST #include "libft.h" -void ft_lstrm(t_list **lst, void *data, int (*cmp)(void *, void *), void (*del)(void *)) +void ft_slist_rm(t_slist **lst, void *data, int (*cmp)(void *, void *), void (*del)(void *)) { - t_list *curr = *lst; - t_list *prev = NULL; + t_slist *curr = *lst; + t_slist *prev = NULL; while (curr) { @@ -21,4 +22,5 @@ void ft_lstrm(t_list **lst, void *data, int (*cmp)(void *, void *), void (*del)( prev = curr; curr = curr->next; } -} \ No newline at end of file +} +#endif \ No newline at end of file diff --git a/srcs/lst/ft_lstshift.c b/srcs/slist/ft_slist_shift.c similarity index 65% rename from srcs/lst/ft_lstshift.c rename to srcs/slist/ft_slist_shift.c index 7a43812..3e40019 100644 --- a/srcs/lst/ft_lstshift.c +++ b/srcs/slist/ft_slist_shift.c @@ -1,8 +1,9 @@ +#if USE_SLIST #include "libft.h" -t_list *ft_lstshift(t_list **lst) +t_slist *ft_slist_shift(t_slist **lst) { - t_list *first; + t_slist *first; if (!lst || !*lst) return NULL; @@ -11,3 +12,4 @@ t_list *ft_lstshift(t_list **lst) first->next = NULL; return first; } +#endif \ No newline at end of file diff --git a/srcs/lst/ft_lstsize.c b/srcs/slist/ft_slist_size.c similarity index 71% rename from srcs/lst/ft_lstsize.c rename to srcs/slist/ft_slist_size.c index 2327fe0..27ba999 100644 --- a/srcs/lst/ft_lstsize.c +++ b/srcs/slist/ft_slist_size.c @@ -1,6 +1,7 @@ +#if USE_SLIST #include "libft.h" -int ft_lstsize(t_list *lst) +int ft_slist_size(t_slist *lst) { int size = 0; while (lst) @@ -10,3 +11,4 @@ int ft_lstsize(t_list *lst) } return size; } +#endif \ No newline at end of file diff --git a/srcs/lst/ft_lstunshift.c b/srcs/slist/ft_slist_unshift.c similarity index 58% rename from srcs/lst/ft_lstunshift.c rename to srcs/slist/ft_slist_unshift.c index 8d78989..5e2a459 100644 --- a/srcs/lst/ft_lstunshift.c +++ b/srcs/slist/ft_slist_unshift.c @@ -1,9 +1,11 @@ +#if USE_SLIST #include "libft.h" -void ft_lstunshift(t_list **lst, t_list *node) +void ft_slist_unshift(t_slist **lst, t_slist *node) { if (!lst || !node) return; node->next = *lst; *lst = node; } +#endif \ No newline at end of file