#include #include #include "simple_list.h" void simple_list_push(t_slist **reflist, t_slist *d_list) { t_slist **p_reflist; p_reflist = reflist; while (*p_reflist) p_reflist = &(*p_reflist)->next; *p_reflist = d_list; } void simple_list_unshift(t_slist **reflist, t_slist *d_list) { simple_list_push(&d_list, *reflist); *reflist = d_list; } t_slist *simple_list_splice(t_slist **reflist) { t_slist *p_list; p_list = *reflist; *reflist = NULL; return (p_list); } t_slist *simple_list_join(t_slist **reflist) { t_slist *p_list; t_slist *c_list; p_list = malloc(sizeof(t_slist)); p_list->next = NULL; p_list->nbytes = 0; for (c_list = *reflist; c_list; c_list = c_list->next) p_list->nbytes += c_list->nbytes; p_list->buf = malloc((p_list->nbytes + 1) * sizeof(char *)); p_list->nbytes = 0; while (*reflist) { memcpy(&((char *)p_list->buf)[p_list->nbytes], (*reflist)->buf, (*reflist)->nbytes); p_list->nbytes += (*reflist)->nbytes; simple_list_delete(reflist); } return (p_list); } t_slist *simple_list_shift(t_slist **reflist) { t_slist *p_list; p_list = *reflist; *reflist = (*reflist)->next; p_list->next = NULL; return (p_list); } void simple_list_delete(t_slist **reflist) { t_slist *p_list; p_list = simple_list_shift(reflist); free(p_list->buf); free(p_list); } void simple_list_free(t_slist **reflist) { while (*reflist) simple_list_delete(reflist); }