/* * $Id$ * * Header file of mr_list.c: a set of function manipulating lists * Provided under the GPL v2 */ #ifndef MR_LIST_H #define MR_LIST_H /* Data structure */ struct mr_list { /** * Pointers to first and last components of the list */ struct mr_list_elt *first; struct mr_list_elt *last; }; struct mr_list_elt { /* Content of the element in the list */ void *data; /* Function to unallocate memory contained in data */ void (*mr_free_data)(void *data); /* The neighbours (pointers to next and previous) */ struct mr_list_elt *next; struct mr_list_elt *prev; }; /* functions (public methods) */ struct mr_list *mr_list_alloc(void); struct mr_list_elt *mr_list_alloc_elt(void *data, void (*mr_free_data)(void *data)); void mr_list_free(struct mr_list *list); void mr_list_free_elt(struct mr_list_elt *elt); int mr_list_length(struct mr_list *list); void mr_list_add_elt_first(struct mr_list *list, struct mr_list_elt *elt); void mr_list_add_elt_last(struct mr_list *list, struct mr_list_elt *elt); void mr_list_add_elt_after(struct mr_list *list, struct mr_list_elt *ref, struct mr_list_elt *elt); void mr_list_add_elt_before(struct mr_list *list, struct mr_list_elt *ref, struct mr_list_elt *elt); void mr_list_del_elt_first(struct mr_list *list); void mr_list_del_elt_last(struct mr_list *list); void mr_list_del_elt_after(struct mr_list *list, struct mr_list_elt *ref); void mr_list_del_elt_before(struct mr_list *list, struct mr_list_elt *ref); #endif /* MR_LIST_H */