Files
obitools3/src/linked_list.h

114 lines
3.2 KiB
C

/****************************************************************************
* Linked list header file *
****************************************************************************/
/**
* @file linked_list.h
* @author Celine Mercier
* @date February 22th 2017
* @brief Header file for linked list functions.
*/
#ifndef LINKED_LIST_H_
#define LINKED_LIST_H_
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
/**
* @brief Structure for a node in a double linked chain.
*/
typedef struct Linked_list_node {
void* value; /**< A pointer (the value kept).
*/
struct Linked_list_node* next; /**< A pointer on the next node.
*/
struct Linked_list_node* previous; /**< A pointer on the previous node.
*/
} Linked_list_node_t, *Linked_list_node_p;
/**
* @brief Adds a new node at the end of a linked list.
*
* Works even if it is the first node.
*
* @param head A pointer on the first node of the linked list, or NULL if the list is empty.
* @param value The value to associate with the node.
*
* @returns A pointer on the new head node of the linked list.
* @retval NULL if an error occurred.
*
* @since February 2017
* @author Celine Mercier (celine.mercier@metabarcoding.org)
*/
Linked_list_node_p ll_add(Linked_list_node_p head, void* value);
/**
* @brief Sets a value at a given index of the list.
*
* @param head A pointer on the first node of the linked list, or NULL if the list is empty.
* @param idx The index of the node at which the value should be changed.
* @param value The new value to associate with the node.
*
* @returns A value indicating the success of the operation.
* @retval 0 if the operation was successfully completed.
* @retval -1 if an error occurred.
*
* @since February 2017
* @author Celine Mercier (celine.mercier@metabarcoding.org)
*/
int ll_set(Linked_list_node_p head, int idx, void* value);
/**
* @brief Gets a node from its index.
*
* @warning The pointer returned is a pointer on the node and not on the value.
*
* @param head A pointer on the first node of the linked list, or NULL if the list is empty.
* @param idx The index of the node to retrieve.
*
* @returns A pointer on the retrieved node.
* @retval NULL if an error occurred.
*
* @since February 2017
* @author Celine Mercier (celine.mercier@metabarcoding.org)
*/
Linked_list_node_p ll_get(Linked_list_node_p head, int idx);
/**
* @brief Deletes a node.
*
* @param head A pointer on the first node of the linked list.
* @param idx The index of the node to delete.
*
* @returns A pointer on the new head node of the linked list.
* @retval NULL if an error occurred. // TODO or if list is now empty...
*
* @since February 2017
* @author Celine Mercier (celine.mercier@metabarcoding.org)
*/
Linked_list_node_p ll_delete(Linked_list_node_p head, int idx);
/**
* @brief Frees all the nodes of a linked list.
*
* @param head A pointer on the first node of the linked list.
*
* @since February 2017
* @author Celine Mercier (celine.mercier@metabarcoding.org)
*/
void ll_free(Linked_list_node_p head);
#endif /* LINKED_LIST_H_ */