diff options
Diffstat (limited to 'src/lst')
| -rw-r--r-- | src/lst/ft_lstbsearch.c | 34 | ||||
| -rw-r--r-- | src/lst/ft_lstmap.c | 2 | ||||
| -rw-r--r-- | src/lst/ft_lstremove_if.c | 19 | ||||
| -rw-r--r-- | src/lst/ft_lstreverse.c | 2 | ||||
| -rw-r--r-- | src/lst/ft_lstsort.c | 4 | ||||
| -rw-r--r-- | src/lst/ft_lstsorted_merge.c | 5 |
6 files changed, 36 insertions, 30 deletions
diff --git a/src/lst/ft_lstbsearch.c b/src/lst/ft_lstbsearch.c index 25a7b4c..68dc43b 100644 --- a/src/lst/ft_lstbsearch.c +++ b/src/lst/ft_lstbsearch.c @@ -6,7 +6,7 @@ /* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/01/30 09:17:51 by cacharle #+# #+# */ -/* Updated: 2020/01/31 10:42:22 by cacharle ### ########.fr */ +/* Updated: 2020/02/16 04:40:16 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -25,7 +25,7 @@ static t_ftlst *st_lstmiddle(t_ftlst *lst, t_ftlst *last) while (fast != last) { fast = fast->next; - if (fast == NULL) + if (fast == last) break ; slow = slow->next; fast = fast->next; @@ -34,24 +34,32 @@ static t_ftlst *st_lstmiddle(t_ftlst *lst, t_ftlst *last) } static t_ftlst *st_lstbsearch_rec(t_ftlst *lst, t_ftlst *last, - t_ftbool (*equal)(void *ref, void *content), void *ref) + t_ftcompar_func cmp, const void *ref) { + int res; t_ftlst *mid; - t_ftlst *left; if (lst == NULL) return (NULL); mid = st_lstmiddle(lst, last); - if ((*equal)(ref, mid->content)) - return (mid); - left = st_lstbsearch_rec(lst, mid, equal, ref); - if (left != NULL) - return (left); - return (st_lstbsearch_rec(mid, NULL, equal, ref)); + if (mid == NULL) + return NULL; + if (mid->next == NULL) + { + if (cmp(ref, mid->content) == 0) + return (mid); + return NULL; + } + res = cmp(ref, mid->next->content); + if (res < 0) + return (st_lstbsearch_rec(lst, mid, cmp, ref)); + else if (res > 0) + return (st_lstbsearch_rec(mid->next->next, NULL, cmp, ref)); + return (mid->next); } -t_ftlst *ft_lstbsearch(t_ftlst *lst, - t_ftbool (*equal)(void *ref, void *content), void *ref) +t_ftlst *ft_lstbsearch(t_ftlst *lst, t_ftcompar_func cmp, + const void *ref) { - return (st_lstbsearch_rec(lst, NULL, equal, ref)); + return (st_lstbsearch_rec(lst, NULL, cmp, ref)); } diff --git a/src/lst/ft_lstmap.c b/src/lst/ft_lstmap.c index 9039d71..dda15de 100644 --- a/src/lst/ft_lstmap.c +++ b/src/lst/ft_lstmap.c @@ -6,7 +6,7 @@ /* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/10/09 09:03:57 by cacharle #+# #+# */ -/* Updated: 2019/11/20 04:01:31 by cacharle ### ########.fr */ +/* Updated: 2020/02/15 23:11:42 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/src/lst/ft_lstremove_if.c b/src/lst/ft_lstremove_if.c index a597c2e..488539e 100644 --- a/src/lst/ft_lstremove_if.c +++ b/src/lst/ft_lstremove_if.c @@ -6,28 +6,27 @@ /* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/01/30 09:36:49 by cacharle #+# #+# */ -/* Updated: 2020/01/30 09:55:47 by cacharle ### ########.fr */ +/* Updated: 2020/02/16 03:57:07 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ #include "libft.h" #include "libft_lst.h" -void ft_lstremove_if(t_ftlst **lst, - t_ftbool (*equal)(void *ref, void *content), void *ref, - void (*del)(void *content)) +void ft_lstremove_if(t_ftlst **lst, t_ftcompar_func cmp, + const void *ref, t_ftdel_func del) { t_ftlst *saved_next; if (lst == NULL || *lst == NULL) return ; - if (!equal(ref, &(*lst)->content)) + if (cmp((*lst)->content, ref) == 0) { - ft_lstremove_if(&(*lst)->next, equal, ref, del); + saved_next = (*lst)->next; + ft_lstdelone(*lst, del); + *lst = saved_next; + ft_lstremove_if(lst, cmp, ref, del); return ; } - saved_next = (*lst)->next; - ft_lstdelone(*lst, del); - *lst = saved_next; - ft_lstremove_if(lst, equal, ref, del); + ft_lstremove_if(&(*lst)->next, cmp, ref, del); } diff --git a/src/lst/ft_lstreverse.c b/src/lst/ft_lstreverse.c index 3d3fc7b..61c9daf 100644 --- a/src/lst/ft_lstreverse.c +++ b/src/lst/ft_lstreverse.c @@ -6,7 +6,7 @@ /* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/01/15 12:49:14 by cacharle #+# #+# */ -/* Updated: 2020/01/15 12:51:54 by cacharle ### ########.fr */ +/* Updated: 2020/02/15 22:53:23 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/src/lst/ft_lstsort.c b/src/lst/ft_lstsort.c index 883604f..e1c9913 100644 --- a/src/lst/ft_lstsort.c +++ b/src/lst/ft_lstsort.c @@ -6,13 +6,13 @@ /* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/10 01:53:55 by cacharle #+# #+# */ -/* Updated: 2020/02/10 02:09:28 by cacharle ### ########.fr */ +/* Updated: 2020/02/16 02:18:05 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ #include "libft_lst.h" -void ft_lstsort(t_ftlst **begin_list, int (*cmp)(void *, void*)) +void ft_lstsort(t_ftlst **begin_list, t_ftcompar_func cmp) { t_ftlst *fast; t_ftlst *slow; diff --git a/src/lst/ft_lstsorted_merge.c b/src/lst/ft_lstsorted_merge.c index c3d0391..4f5332c 100644 --- a/src/lst/ft_lstsorted_merge.c +++ b/src/lst/ft_lstsorted_merge.c @@ -6,14 +6,13 @@ /* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/10 01:58:52 by cacharle #+# #+# */ -/* Updated: 2020/02/10 02:13:37 by cacharle ### ########.fr */ +/* Updated: 2020/02/16 02:18:11 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ #include "libft_lst.h" -t_ftlst *ft_lstsorted_merge(t_ftlst *l1, t_ftlst *l2, - int (*cmp)(void *, void *)) +t_ftlst *ft_lstsorted_merge(t_ftlst *l1, t_ftlst *l2, t_ftcompar_func cmp) { t_ftlst *merged; |
