/* * $URL: svn://elmer/devel/SVN/SDDAS/trunk/libant/LinkList.h $ %D% SwRI LinkList.h -- header for LinkList.c */ #ifndef LinkList_h #define LinkList_h #include /* for NULL */ #define LinkListEnd -1 typedef struct LinkNode_s { void *data; /* some kind of data */ struct LinkNode_s *next; /* next node in list */ } LinkNode, *LinkList; #define LinkData(list) (((LinkList)list)->data) #define LinkNext(list) (((LinkList)list)->next) typedef int (*LinkFun) (void *, void *); /* pointer to a function that returns an * integer */ typedef void (*LinkFreeFunc) (void *); /* pointer to a function that needs one parameter */ typedef void (*LinkApplyFun) (); /* pointer to a function that returns an * integer */ typedef void (*LinkApplyFunc1) (void *); /* pointer to a function that returns an * integer */ typedef void (*LinkApplyFunc2) (void *, void *); /* pointer to a function that returns an * integer */ typedef void (*LinkApplyFunc3) (void *, void *, void *); /* pointer to a function that returns an * integer */ typedef void *(*LinkFilter) (void *); /* pointer to a function that returns a * pointer to a void */ /** ** Functions **/ /* * LinkAppend -- appends data to end of a list */ LinkList LinkAppend( LinkList list, void *data ); /* * LinkBefore -- find link before one with this data */ LinkList LinkBefore( LinkList list, void *ref_data); /* * LinkCat -- connect two lists */ LinkList LinkCat( LinkList head, LinkList tail ); /* * apply void function to each list element */ void LinkApply( LinkList list, LinkApplyFunc1 fun ); /* * apply function and data to list elements */ void LinkApplyData( LinkList list, LinkApplyFun fun, void *data ); /* * apply function and 2 data items to list */ void LinkApplyData2( LinkList list, LinkApplyFun, void *data, void *data2 ); /* * LinkCompareData -- compares data pointers in two nodes return 0 if * pointers match, 1 otherwise */ int LinkCompareData( void *data1, void *data2 ); /* * LinkCount -- returns number of items in list */ int LinkCount( LinkList list ); /* * creates a node with data in it */ LinkList LinkCreate( void *data ); /* * find data in list using compare fun ptr */ LinkList FindLink( LinkList list, void *data, LinkFun compare ); /* * find data in list using compare fun ptr */ void *LinkFind( LinkList list, void *data, LinkFun compare ); /* * find data in list by comparing data ptrs */ void *LinkFindData( LinkList list, void *data ); /* * LinkInsert -- insert data into sorted list */ LinkList LinkInsert( LinkList list, void *data, LinkFun compare ); /* * places data after node with ref data */ LinkList LinkInsertAfter( LinkList oldlist, void *ref_data, void *data ); /* * places data at position n i n list */ LinkList LinkInsertAt( LinkList oldlist, int n, void *data ); /* * places data before node with ref data */ LinkList LinkInsertBefore( LinkList oldlist, void *ref_data, void *data ); /* * LinkLast -- returns last sublist of list */ LinkList LinkLast( LinkList list ); /* * LinkListDup -- create duplicate list DOES NOT OWN ITS DATA */ LinkList LinkListDup( LinkList oldlist ); /* * free all nodes in link list */ void LinkListFree( LinkList list ); /* * LinkListFreeMucho -- free all link list nodes and their data */ void LinkListFreeMucho( LinkList list, LinkFreeFunc freer ); /* * */ int LinkPosition( LinkList list, void *data ); /* * LinkPrint -- print data ptrs from list */ void LinkPrint( LinkList list ); /* * LinkPush -- push element on front of linked list */ LinkList LinkPush( LinkList list, void *data ); /* * remove a link and data from list */ LinkList LinkRemove( LinkList list, void *data ); /* * remove a link from list */ LinkList LinkRemoveNoFree ( LinkList list, void *data ); /* * */ LinkList LinkSort( LinkList OldList, LinkFun compare ); /* * ListFromList -- apply function to one list to create another */ LinkList ListFromList( LinkList inlist, LinkFilter fun ); /* * split a linklist into an equa number of linklists */ LinkList * ListSplit(LinkList List, int *n); /* * return the number of links in the list */ int LinkDepth(LinkList List); #endif