/*---------------------------------------------------------------------- File : dclists.h Contents: operations on doubly connected lists Author : Christian Borgelt History : 03.03.1998 file created from file sclists.h 04.03.1998 function lst_reset extended 13.05.1998 parameter `dir' of function dcl_search added 21.06.1998 deletion function stored in list body 02.09.1998 client data added to functions ----------------------------------------------------------------------*/ #ifndef __DCLISTS__ #define __DCLISTS__ /*-------------------------------------------------------------------- Preprocessor Definitions --------------------------------------------------------------------*/ /* --- parameter 'pos' of function dcl_reset() -- */ #define DCL_FRONT -1 /* in front of first element */ #define DCL_FIRST 0 /* on first element */ #define DCL_LAST 1 /* on last element */ #define DCL_BACK 2 /* behind last element */ /* --- parameter 'move' of function dcl_get() --- */ #define DCL_FORWARD 1 /* go to successor element */ #define DCL_BACKWARD -1 /* go to predecessor element */ #define DCL_STAY 0 /* stay on current element */ /*-------------------------------------------------------------------- Type Definitions --------------------------------------------------------------------*/ typedef struct dclist DCLIST; /* a doubly connected list */ typedef void DCL_DELFN (void *p); typedef void DCL_APPFN (void *call, void *client); typedef int DCL_CMPFN (const void *p1, const void *p2, void *client); /* list element functions */ /*-------------------------------------------------------------------- Functions --------------------------------------------------------------------*/ DCLIST* dcl_create (DCL_DELFN delfn); void dcl_delete (DCLIST *list); int dcl_len (DCLIST *list); void* dcl_reset (DCLIST *list, int pos); void* dcl_insert (DCLIST *list, unsigned int size); void* dcl_get (DCLIST *list, int move); void dcl_remove (DCLIST *list, int all); void* dcl_search (DCLIST *list, const void *datum, int dir, DCL_CMPFN cmpfn, void *client); void dcl_apply (DCLIST *list, DCL_APPFN appfn, void *client); void dcl_sort (DCLIST *list, DCL_CMPFN cmpfn, void *client); int dcl_merge (DCLIST *dst, DCLIST *src); #endif