|  | #ifndef _LISTS_H_ | 
|  | #define _LISTS_H_ | 
|  |  | 
|  | #define LIST_START	-1      /* Handy Constants that substitute for item positions */ | 
|  | #define LIST_END	0       /* END_OF_LIST means one past current length of list when */ | 
|  | /* inserting. Otherwise it refers the last item in the list. */ | 
|  |  | 
|  | typedef struct | 
|  | { | 
|  | void            *ptr; | 
|  | unsigned int    size; | 
|  | } HandleRecord; | 
|  |  | 
|  | typedef void **Handle; | 
|  |  | 
|  | typedef int (*CompareFunction)(void *data1, void *data2) ; | 
|  |  | 
|  | typedef struct ListStructTag | 
|  | { | 
|  | int signature;              /* debugging aid */ | 
|  | int percentIncrease;        /* %of current size to increase by when list is out of space */ | 
|  | int minNumItemsIncrease;    /* fixed number of items to increase by when list is out of space */ | 
|  | int listSize;               /* number of items than can fit in the currently allocated memory */ | 
|  | int itemSize;               /* the size of each item in the list (same for every item) */ | 
|  | int numItems;               /* number of items currently in the list */ | 
|  | unsigned char itemList[1];  /* resizable array of list elements */ | 
|  | } ListStruct; | 
|  |  | 
|  | typedef struct ListStructTag **list_t;        /* The list abstract data type */ | 
|  | typedef int ( * ListApplicationFunc)(int index, void *ptrToItem, void *callbackData); | 
|  |  | 
|  | /* Basic List Operations */ | 
|  | list_t	ListCreate(int elementSize); | 
|  | int     ListNumItems(list_t list); | 
|  | int     ListInsertItem(list_t list, void *ptrToItem, int itemPosition); | 
|  | int     ListInsertItems(list_t list, void *ptrToItems, int firstItemPosition, int numItemsToInsert); | 
|  | void    ListDispose(list_t list); | 
|  | void    *ListGetPtrToItem(list_t list, int itemPosition); | 
|  | void    ListRemoveItem(list_t list, void *itemDestination, int itemPosition); | 
|  | void    ListRemoveItems(list_t list, void *itemsDestination, int firstItemPosition, int numItemsToRemove); | 
|  |  | 
|  | #if 0	/* rarely ever used; kept here for reference just in case ... */ | 
|  | void    ListDisposePtrList(list_t list); | 
|  | void    ListGetItem(list_t list, void *itemDestination, int itemPosition); | 
|  | void    ListReplaceItem(list_t list, void *ptrToItem, int itemPosition); | 
|  | void    ListRemoveItem(list_t list, void *itemDestination, int itemPosition); | 
|  | void    ListGetItems(list_t list, void *itemsDestination, int firstItemPosition, int numItemsToGet); | 
|  | void    ListReplaceItems(list_t list, void *ptrToItems, int firstItemPosition, int numItemsToReplace); | 
|  | void    ListRemoveItems(list_t list, void *itemsDestination, int firstItemPosition, int numItemsToRemove); | 
|  | list_t  ListCopy(list_t originalList); | 
|  | int     ListAppend(list_t list1, list_t list2); | 
|  | void    ListClear(list_t list); | 
|  | int     ListEqual(list_t list1, list_t list2); | 
|  | int     ListInsertInOrder(list_t list, void *ptrToItem, CompareFunction compareFunction); | 
|  | void    *ListGetDataPtr(list_t list); | 
|  | int     ListApplyToEach(list_t list, int ascending, ListApplicationFunc funcToApply, void *callbackData); | 
|  |  | 
|  | /* List Searching and Sorting */ | 
|  | int     ListFindItem(list_t list, void *ptrToItem, int startingPosition, CompareFunction compareFunction); | 
|  | void    ListRemoveDuplicates(list_t list, CompareFunction compareFunction); | 
|  | int     ListBinSearch(list_t list, void *itemPtr, CompareFunction compareFunction); | 
|  | void    ListQuickSort(list_t list, CompareFunction compareFunction); | 
|  | void    ListHeapSort(list_t list, CompareFunction compareFunction); | 
|  | void    ListInsertionSort(list_t list, CompareFunction compareFunction); | 
|  | int     ListIsSorted(list_t list, CompareFunction compareFunction); | 
|  |  | 
|  | /*  Advanced List Functions */ | 
|  | void	ListSetAllocationPolicy(list_t list, int minItemsPerAlloc, int percentIncreasePerAlloc); | 
|  | void    ListCompact(list_t list); | 
|  | int     ListPreAllocate(list_t list, int numItems); | 
|  | int     ListGetItemSize(list_t list); | 
|  | int     GetIntListFromParmInfo(va_list parmInfo, int numIntegers, list_t *integerList); | 
|  | int     ListInsertAfterItem(list_t list, void *ptrToItem, void *ptrToItemToInsertAfter, CompareFunction compareFunction); | 
|  | int     ListInsertBeforeItem(list_t list, void *ptrToItem, void *ptrToItemToInsertBefore, CompareFunction compareFunction); | 
|  | #endif /* 0 */ | 
|  |  | 
|  | #endif	/* _LISTS_H_ */ |