/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* ft_linked_list.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: tischmid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/04/01 15:25:42 by tischmid #+# #+# */ /* Updated: 2023/04/02 18:12:47 by tischmid ### ########.fr */ /* */ /* ************************************************************************** */ #include "ft_linked_list.h" #include "ft_strlib.h" #include t_map_entry *ll_map_new_entry(char *key, char *value) { t_map_entry *new_entry; char *new_value; char *new_key; new_value = (char *) malloc(sizeof(char) * (ft_strlen(value) + 1)); new_key = (char *) malloc(sizeof(char) * (ft_strlen(key) + 1)); ft_strcpy(new_value, value); ft_strcpy(new_key, key); new_entry = (t_map_entry *) malloc(sizeof(t_map_entry)); new_entry->key = new_key; new_entry->value = new_value; new_entry->next = NULL; return (new_entry); } char *ll_map_get(t_map_entry *head, char *key) { t_map_entry *current; if (head != NULL) { current = head; while (current != NULL) { if (!ft_strcmp(current->key, key)) return (current->value); current = current->next; } } return (NULL); } void ll_map_push(t_map_entry *head, char *key, char *value) { t_map_entry *current; if (head != NULL) { current = head; while (current->next != NULL) current = current->next; current->next = ll_map_new_entry(key, value); } } void free_entry(t_map_entry *entry) { free(entry->key); free(entry->value); } t_map_entry *ll_pop_last(t_map_entry *head, t_ret_flag noretval, int free_data) { t_map_entry *current; t_map_entry *retval; retval = NULL; if (head == NULL) return (retval); if (head->next == NULL) { if (noretval != POP_NO_RETURN_VAL) retval = ll_map_new_entry(head->key, head->value); if (free_data) free_entry(head); free(head); return (retval); } current = head; while (current->next->next != NULL) current = current->next; if (noretval != POP_NO_RETURN_VAL) retval = ll_map_new_entry(current->next->key, current->next->value); if (free_data) free_entry(current->next); free(current->next); current->next = NULL; return (retval); } void ll_clear(t_map_entry *head, int free_data) { if (head != NULL) { while (head->next != NULL) ll_pop_last(head, POP_NO_RETURN_VAL, free_data); ll_pop_last(head, POP_NO_RETURN_VAL, free_data); } }