removing the libft of rparodi
This commit is contained in:
parent
0391323626
commit
be6038dcc8
523 changed files with 724 additions and 3336 deletions
450
libft/include/ft_list.h
Normal file
450
libft/include/ft_list.h
Normal file
|
|
@ -0,0 +1,450 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_list.h :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: bgoulard <bgoulard@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2023/12/11 11:40:02 by bgoulard #+# #+# */
|
||||
/* Updated: 2024/06/24 00:04:12 by bgoulard ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#ifndef FT_LIST_H
|
||||
# define FT_LIST_H
|
||||
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* Module: FT_LIST */
|
||||
/* Prefix: ft_dl, ft_ll */
|
||||
/* */
|
||||
/* The module FT_LIST provides a way to handle task related to linked */
|
||||
/* lists whether the list happens to be simply linked, doubly linked. */
|
||||
/* Due to the nature of the module (handling different types of the same */
|
||||
/* variety of struct the prototypes are arranged using functionality */
|
||||
/* instead of type as would be common. */
|
||||
/* Currently supported types: */
|
||||
/* -simply_linked, */
|
||||
/* -doubly_linked. */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
# include "ft_list_types.h"
|
||||
# include "ft_defs.h"
|
||||
|
||||
/* ************************************************************************** */
|
||||
/* ADD */
|
||||
/* ************************************************************************** */
|
||||
|
||||
/// @brief Add a node at the end of the list
|
||||
/// @param head The head of the list
|
||||
/// @param added The node to add
|
||||
void ft_dl_add_back(t_dlist **head, t_dlist *const added);
|
||||
|
||||
/// @brief Add a node at the beginning of the list
|
||||
/// @param head The head of the list
|
||||
/// @param added The node to add
|
||||
void ft_dl_add_front(t_dlist **head, t_dlist *const added);
|
||||
|
||||
/// @brief Add a node at the begining of the list
|
||||
/// @param head The head of the list
|
||||
/// @param added The node to add
|
||||
/// @return void
|
||||
void ft_ll_add_front(t_list **lst, t_list *const new_node);
|
||||
|
||||
/// @brief Add a node at the end of the list
|
||||
/// @param head The head of the list
|
||||
/// @param added The node to add
|
||||
/// @return void
|
||||
void ft_ll_add_back(t_list **lst, t_list *const new_node);
|
||||
|
||||
/* ************************************************************************** */
|
||||
/* APPLY */
|
||||
/* ************************************************************************** */
|
||||
|
||||
/// @brief Apply a function on every node of the list
|
||||
/// @param start The start of the list
|
||||
/// @param applied The function to apply
|
||||
/// @return The number of nodes applied
|
||||
size_t ft_dl_apply(const t_dlist *start, t_data_apply applied);
|
||||
|
||||
/// @brief Apply a function on every node of the list until the end
|
||||
/// @param start The start of the list
|
||||
/// @param end The end of the list
|
||||
/// @param applied The function to apply
|
||||
/// @return The number of nodes applied
|
||||
size_t ft_dl_apply_range(const t_dlist *start, const t_dlist *end,
|
||||
t_data_apply applied);
|
||||
|
||||
/// @brief Apply a function on every node of the list until the end
|
||||
/// @param start The start of the list
|
||||
/// @param end The end of the list
|
||||
/// @param applied The function to apply
|
||||
/// @return The number of nodes applied
|
||||
size_t ft_dl_apply_range_node(const t_dlist *start, const t_dlist *end,
|
||||
t_dnode_apply applied);
|
||||
|
||||
/// @brief Apply a function on every node of the list
|
||||
/// @param lst The list
|
||||
/// @param f The function to apply
|
||||
/// @return void
|
||||
void ft_ll_apply(const t_list *lst, t_data_apply f);
|
||||
|
||||
/// @brief Apply a function on every node of the list until the element end
|
||||
/// @param lst The list
|
||||
/// @param end The end of the list
|
||||
/// @param f The function to apply
|
||||
/// @return void
|
||||
void ft_ll_apply_range(const t_list *lst, const t_list *end,
|
||||
t_data_apply f);
|
||||
|
||||
/// @brief Apply a function on every node of the list until the element end
|
||||
/// @param lst The list
|
||||
/// @param end The end of the list
|
||||
/// @param f The function to apply
|
||||
/// @return void
|
||||
void ft_ll_apply_range_node(const t_list *lst, const t_list *end,
|
||||
t_lnode_apply f);
|
||||
|
||||
/* ************************************************************************** */
|
||||
/* CLEAR */
|
||||
/* ************************************************************************** */
|
||||
|
||||
/// @brief Clear a list
|
||||
/// @param head The adress of head of the list to clear
|
||||
/// @param del The function to delete the data
|
||||
/// @return The number of nodes deleted
|
||||
/// @note The head is set to NULL
|
||||
size_t ft_dl_clear(t_dlist **head, t_data_apply del);
|
||||
|
||||
/// @brief Clear a list until the end
|
||||
/// @param start The start of the list
|
||||
/// @param end The end of the list
|
||||
/// @param del The function to delete the data
|
||||
/// @return The number of nodes deleted
|
||||
size_t ft_dl_clear_range(t_dlist *start, t_dlist *end, t_data_apply del);
|
||||
|
||||
/// @brief Clear a list
|
||||
/// @param lst The list
|
||||
/// @param del The function to delete the data
|
||||
/// @return void
|
||||
void ft_ll_clear(t_list **lst, t_data_apply del);
|
||||
|
||||
// TODO: implement clear range for ll
|
||||
|
||||
/* ************************************************************************** */
|
||||
/* CREATE & COPY */
|
||||
/* ************************************************************************** */
|
||||
|
||||
/// @brief Create a new node
|
||||
/// @param data The data of the node
|
||||
/// @return The new node
|
||||
t_dlist *ft_dl_create(const void *data);
|
||||
|
||||
/// @brief Copy a node
|
||||
/// @param other The node to copy
|
||||
/// @return The new node
|
||||
/// @note The node is a copy of the original node but does not copy the data
|
||||
/// in a new ptr
|
||||
t_dlist *ft_dl_copy_node(const t_dlist *const other);
|
||||
|
||||
/// @brief Copy a node
|
||||
/// @param other The node to copy
|
||||
/// @return The new node
|
||||
/// @note The node is a copy of the original node but does not copy the data
|
||||
/// in a new ptr. This is wgy it doesn't need a delete function.
|
||||
t_dlist *ft_dl_copy_list(const t_dlist *const other);
|
||||
|
||||
/// @brief Create a new node
|
||||
/// @param data The data of the node
|
||||
/// @return The new node
|
||||
t_list *ft_ll_create(const void *const data);
|
||||
|
||||
/// @brief Copy a node
|
||||
/// @param other The node to copy
|
||||
/// @return The new node
|
||||
t_list *ft_ll_copy_node(const t_list *const other);
|
||||
|
||||
/// @brief Copy a list
|
||||
/// @param other The list to copy
|
||||
/// @return The new list
|
||||
t_list *ft_ll_copy_list(const t_list *const other);
|
||||
|
||||
/* ************************************************************************** */
|
||||
/* DELETE */
|
||||
/* ************************************************************************** */
|
||||
|
||||
/// @brief Delete a node
|
||||
/// @param node The node to delete
|
||||
/// @param del The function to delete the data
|
||||
/// @return The number of nodes deleted
|
||||
int ft_dl_delete_self(t_dlist *node, t_data_apply del);
|
||||
|
||||
/// @brief Delete a node
|
||||
/// @param start The node from which to delete
|
||||
/// @param end The node until which to delete
|
||||
/// @return The number of nodes deleted
|
||||
size_t ft_dl_delete_range(t_dlist *start, const t_dlist *target,
|
||||
t_data_apply del);
|
||||
|
||||
/// @brief Delete a doubly linked list entirely
|
||||
/// @param head The head of the list
|
||||
/// @return The number of nodes deleted
|
||||
size_t ft_dl_delete(t_dlist **head, t_data_apply del);
|
||||
|
||||
// TODO: implement delete dup for dl
|
||||
// not currently implemented - idea of the function:
|
||||
// /// @brief Delete duplicates node
|
||||
// /// @param head The head of the list
|
||||
// /// @param cmp The compare function
|
||||
// /// @param del The function to delete the data
|
||||
// /// @return The number of nodes deleted
|
||||
// size_t ft_dl_delete_dup(t_dlist **src, t_data_cmp cmp,
|
||||
// t_data_apply del);
|
||||
|
||||
/// @brief Delete a node
|
||||
/// @param node The node to delete
|
||||
/// @param del The function to delete the data
|
||||
/// @return void
|
||||
/// @note this is a useles function, it is here for compatibility with the
|
||||
/// libft project.
|
||||
void ft_ll_delone(t_list *lst, t_data_apply del);
|
||||
|
||||
/// @brief Delete a node
|
||||
/// @param lst The node from which to delete
|
||||
/// @param target The node until which to delete
|
||||
/// @param del The function to delete the data
|
||||
/// @return void
|
||||
size_t ft_ll_delete_range(t_list *lst, const t_list *end, t_data_apply del);
|
||||
|
||||
// TODO: implement delete for ll
|
||||
// delete should delete the whole list
|
||||
|
||||
// TODO: implement delete dup for ll
|
||||
// not currently implemented - idea of the function:
|
||||
// /// @brief Delete duplicates node
|
||||
// /// @param head The head of the list
|
||||
// /// @param cmp The compare function
|
||||
// /// @param del The function to delete the data
|
||||
// /// @return The number of nodes deleted
|
||||
// size_t ft_listdelete_dup(t_list **src, t_data_cmp cmp,
|
||||
// t_data_apply del);
|
||||
|
||||
/* ************************************************************************** */
|
||||
/* FIND */
|
||||
/* ************************************************************************** */
|
||||
|
||||
/// @brief Find a node in a list
|
||||
/// @param head The head of the list
|
||||
/// @param data The data to find
|
||||
/// @param cmp The compare function
|
||||
/// @return The node found or NULL
|
||||
t_dlist *ft_dl_find(const t_dlist *head, const void *data, t_data_cmp cmp);
|
||||
|
||||
/// @brief Find a node in a list
|
||||
/// @param list The list
|
||||
/// @param data The data to find
|
||||
/// @param cmp The compare function
|
||||
/// @return The node found or NULL
|
||||
void *ft_ll_find(const t_list *list, const void *data, t_data_cmp cmp);
|
||||
|
||||
/* ************************************************************************** */
|
||||
/* GETTERS */
|
||||
/* ************************************************************************** */
|
||||
|
||||
/// @brief Get the datas of a list
|
||||
/// @param src The list
|
||||
/// @return The datas of the list
|
||||
/// @note The datas are in the same order as the nodes and the pointers to the
|
||||
/// datas need to be freed
|
||||
void **ft_dl_get_datas(const t_dlist *src);
|
||||
|
||||
/// @brief Get the nodes of a list
|
||||
/// @param src The list
|
||||
/// @return The nodes of the list
|
||||
/// @note The nodes are in the same order as the datas and the pointers to the
|
||||
/// nodes need to be freed
|
||||
t_dlist **ft_dl_get_nodes(const t_dlist *src);
|
||||
|
||||
/// @brief Get the datas of a list
|
||||
/// @param src The list
|
||||
/// @return The datas of the list
|
||||
void **ft_ll_get_datas(const t_list *src);
|
||||
|
||||
/// @brief Get the nodes of a list
|
||||
/// @param src The list
|
||||
/// @return The nodes of the list
|
||||
t_list **ft_ll_get_nodes(const t_list *src);
|
||||
|
||||
/* ************************************************************************** */
|
||||
/* ITERATORS */
|
||||
/* ************************************************************************** */
|
||||
|
||||
/// @brief Get the last node of a list
|
||||
/// @param head The head of the list
|
||||
/// @param index The index of the node
|
||||
/// @return The node at index or NULL
|
||||
t_dlist *ft_dl_at(const t_dlist *head, size_t index);
|
||||
|
||||
/// @brief Get the last node of a list
|
||||
/// @param head The head of the list
|
||||
/// @return The last node of the list
|
||||
t_dlist *ft_dl_end(const t_dlist *head);
|
||||
|
||||
/// @brief Get the first node of a list
|
||||
/// @param head The head of the list
|
||||
/// @return The first node of the list
|
||||
t_dlist *ft_dl_begin(const t_dlist *head);
|
||||
|
||||
/// @brief Get the last node of a list
|
||||
/// @param lst The list
|
||||
/// @return The last node of the list
|
||||
t_list *ft_ll_end(const t_list *lst);
|
||||
|
||||
/// @brief Get the node of a list at position index
|
||||
/// @param lst The list
|
||||
/// @param index The index of the node
|
||||
/// @return The node at index or NULL
|
||||
t_list *ft_ll_at(const t_list *lst, size_t index);
|
||||
|
||||
/* ************************************************************************** */
|
||||
/* MAP */
|
||||
/* ************************************************************************** */
|
||||
|
||||
/// @brief Apply a function on every node of the list
|
||||
/// @param lst The list
|
||||
/// @param f The function to apply
|
||||
/// @param del The function to delete the data if allocation fails
|
||||
/// @return The new list
|
||||
t_dlist *ft_dl_map(const t_dlist *lst, t_data_tr f, t_data_apply del);
|
||||
|
||||
/// @brief Apply a function on every node of the list
|
||||
/// @param lst The list
|
||||
/// @param f The function to apply
|
||||
/// @param del The function to delete the data if allocation fails
|
||||
/// @return The new list
|
||||
t_list *ft_ll_map(const t_list *lst, t_data_tr f, t_data_apply del);
|
||||
|
||||
/* ************************************************************************** */
|
||||
/* NEW */
|
||||
/* ************************************************************************** */
|
||||
|
||||
/// @brief Create a new node
|
||||
/// @return The new node
|
||||
t_dlist *ft_dl_new(void);
|
||||
|
||||
/// @brief Create a new node
|
||||
/// @return The new node
|
||||
t_list *ft_ll_new(void);
|
||||
|
||||
/* ************************************************************************** */
|
||||
/* PUSH & POP */
|
||||
/* ************************************************************************** */
|
||||
|
||||
/// @brief Push a node at the beginning of the list
|
||||
/// @param node The head of the list
|
||||
/// @param data The data of the node
|
||||
/// @return The new head of the list
|
||||
t_dlist *ft_dl_push(t_dlist **node, const void *data);
|
||||
|
||||
/// @brief Push a node at the end of the list
|
||||
/// @param node The head of the list
|
||||
/// @param data The data of the node
|
||||
/// @return The new head of the list
|
||||
t_dlist *ft_dl_push_back(t_dlist **node, const void *data);
|
||||
|
||||
/// @brief Pop a node at the beginning of the list
|
||||
/// @param node The head of the list
|
||||
/// @return The data of the node
|
||||
void *ft_dl_pop(t_dlist **node);
|
||||
|
||||
/// @brief Pop a node at the end of the list
|
||||
/// @param node The head of the list
|
||||
/// @return The data of the node
|
||||
void *ft_dl_pop_back(t_dlist **node);
|
||||
|
||||
/// @brief Push a node at the beginning of the list
|
||||
/// @param lst The head of the list
|
||||
/// @param data The data of the node
|
||||
/// @return The new head of the list
|
||||
t_list *ft_ll_push(t_list **lst, const void *data);
|
||||
|
||||
/// @brief Push a node at the end of the list
|
||||
/// @param lst The head of the list
|
||||
/// @param data The data of the node
|
||||
/// @return The new head of the list
|
||||
t_list *ft_ll_push_back(t_list **lst, const void *data);
|
||||
|
||||
/// @brief Pop a node at the beginning of the list
|
||||
/// @param lst The head of the list
|
||||
/// @return The data of the node
|
||||
void *ft_ll_pop(t_list **lst);
|
||||
|
||||
/// @brief Pop a node at the end of the list
|
||||
/// @param lst The head of the list
|
||||
/// @return The data of the node
|
||||
void *ft_ll_pop_back(t_list **lst);
|
||||
|
||||
/* ************************************************************************** */
|
||||
/* REVERSE */
|
||||
/* ************************************************************************** */
|
||||
|
||||
/// @brief Reverse a list
|
||||
/// @param head The head of the list
|
||||
/// @return the new head of the list
|
||||
t_dlist *ft_dl_rev(t_dlist **head);
|
||||
|
||||
/// @brief Reverse a list
|
||||
/// @param head The head of the list
|
||||
/// @return the new head of the list
|
||||
t_list *ft_ll_rev(t_list **head);
|
||||
|
||||
/* ************************************************************************** */
|
||||
/* SIZE */
|
||||
/* ************************************************************************** */
|
||||
|
||||
/// @brief Get the size of a list
|
||||
/// @param head The head of the list
|
||||
/// @return The size of the list
|
||||
size_t ft_dl_size(const t_dlist *head);
|
||||
|
||||
/// @brief Get the size of a list
|
||||
/// @param head The head of the list
|
||||
/// @param function The function to check if the data is something
|
||||
/// @return The size of the list
|
||||
size_t ft_dl_size_of_data(const t_dlist *head, t_data_is function);
|
||||
|
||||
/// @brief Get the size of a list
|
||||
/// @param lst The list
|
||||
/// @return The size of the list
|
||||
size_t ft_ll_size(const t_list *lst);
|
||||
|
||||
/// @brief Get the size of a list
|
||||
/// @param lst The list
|
||||
/// @param function The function to check if the data is something
|
||||
/// @return The size of the list
|
||||
size_t ft_ll_size_match(const t_list *lst, t_data_is function);
|
||||
|
||||
// todo: rename either ll_size_of_data or dl_size_match
|
||||
|
||||
/* ************************************************************************** */
|
||||
/* SUB */
|
||||
/* ************************************************************************** */
|
||||
|
||||
/// @brief Get a sublist of a list
|
||||
/// @param src The list
|
||||
/// @param to The node until which to get the sublist
|
||||
/// @return The sublist
|
||||
/// @note The sublist is a copy of the original list but does not copy
|
||||
/// the data in a new ptr. This is why it doesn't need a delete function.
|
||||
t_dlist *ft_dl_subrange(const t_dlist *src, const t_dlist *to);
|
||||
|
||||
/// @brief Get a sublist of a list
|
||||
/// @param src The list
|
||||
/// @param to The node until which to get the sublist
|
||||
/// @note The sublist is a copy of the original list but does not copy
|
||||
/// the data in a new ptr. This is why it doesn't need a delete function.
|
||||
/// @return The sublist
|
||||
t_list *ft_ll_subrange(const t_list *lst, const t_list *end);
|
||||
|
||||
#endif /* FT_LIST_H */
|
||||
Loading…
Add table
Add a link
Reference in a new issue