1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- #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_ */
|