Public feed #377368

Anonymous

public c v1 · immutable
Raw Edit
·published 2007-03-01 18:13 UTC
rendered paste body
/** The Double-Linked List Structure for Elements**********************************************************************/typedef struct DListElem_{    void              *data;       //pointer to any kind of data    struct DListElem_ *next;    struct DListElem_ *prev;}DListElem;/** The Double-Linked List Structure***********************************************************************/typedef struct DList_{    int     size;    int     (*match)(const void *key1,const void *key2);    void    (*destroy)(void *data);    DListElem *head;    DListElem *tail;}DList;/** The Double-Linked List Functions***********************************************************************//*function for initializing the Double Linked List Return: N/R                                       */void DList_Init(DList *list,void (*destroy)(void *data));/*function for destroying the Double Linked List, after calling DList_Destroy  you cant call any other function until you call DList_Init();  Return: N/R                                      */void DList_Destroy(DList *list);/*function for inserting an element to the linked list right next to the element  specified by *element with *data  Return: 0 on succes | -1 on error                 */int DList_Ins_Next(DList *list,DListElem *element,const void *data);/*function for inserting an element to the linked list right before the element  specified by *element with *data  Return: 0 on succes | -1 on error                 */int DList_Ins_Prev(DList *list,DListElem *element,const void *data);/*function for removing an element from the linked list  Return: 0 on succes | -1 on error                 */int DList_Remove(DList *list,DListElem *element, const void **data);/*function thats return the number of elements in the linked list */inline int DList_Size(DList *list);/*function that test if the linked list is full or not  Return: true if the linked is is full | false if not            */bool DList_IsFull(DList *list);/*function that traverse the whole list and apply a user defined  func to each element */void DList_Traverse(DList *list, void (*pfun)(DListElem *element));/*************************MAKRO DEFINITIONS********************************//**************************************************************************/#define DList_Head(list)        ((list)->head)#define DList_Tail(list)        ((list)->tail)#define DList_IsHead(element)   ((element)->prev==NULL ? 1 : 0)#define DList_IsTail(element)   ((element)->next==NULL ? 1 : 0)#define DList_Data(element)     ((element)->data)#define DList_Next(element)     ((element)->next)#define DList_Prev(element)     ((element)->prev)/*************************************************************************/#endif