/* dlist.h Pedro Flynn - pflynn@microsoftsucks.org */ #ifndef DLIST_H #define DLIST_H #ifndef NULL #define NULL 0 #endif #ifdef __cplusplus extern "C" { #endif typedef struct _DListElement{ void* data; struct _DListElement* prev; struct _DListElement* next; } DListElement; typedef struct _DList{ int size; void (*destroy)(void*); int (*match)(const void*,const void*); DListElement* head; DListElement* tail; } DList; DList* dlist_create(int (*macth)(const void*,const void*),void (*destroy)(void*)); DListElement* dlist_insert_next(DList* dlist,DListElement* element,void* data); DListElement* dlist_insert_prev(DList* dlist,DListElement* element,void* data); int dlist_remove_element(DList* dlist,DListElement* element,void** data); DListElement* dlist_get_element(DList* dlist,const void* data); void dlist_destroy(DList* dlist); /* para usar a lista como uma fila */ DListElement* dlist_enqueue_element(DList *dlist,void* data); int dlist_dequeue_element(DList *dlist,void** data); /* para usar a lista como uma pilha */ DListElement* dlist_push_element(DList *dlist,void* data); int dlist_pop_element(DList *dlist,void** data); #ifdef __cplusplus } #endif #endif