📄 lists.h
字号:
#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_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -