lists.h 4.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #ifndef _LISTS_H_
  2. #define _LISTS_H_
  3. #define LIST_START -1 /* Handy Constants that substitute for item positions */
  4. #define LIST_END 0 /* END_OF_LIST means one past current length of list when */
  5. /* inserting. Otherwise it refers the last item in the list. */
  6. typedef struct
  7. {
  8. void *ptr;
  9. unsigned int size;
  10. } HandleRecord;
  11. typedef void **Handle;
  12. typedef int (*CompareFunction)(void *data1, void *data2) ;
  13. typedef struct ListStructTag
  14. {
  15. int signature; /* debugging aid */
  16. int percentIncrease; /* %of current size to increase by when list is out of space */
  17. int minNumItemsIncrease; /* fixed number of items to increase by when list is out of space */
  18. int listSize; /* number of items than can fit in the currently allocated memory */
  19. int itemSize; /* the size of each item in the list (same for every item) */
  20. int numItems; /* number of items currently in the list */
  21. unsigned char itemList[1]; /* resizable array of list elements */
  22. } ListStruct;
  23. typedef struct ListStructTag **list_t; /* The list abstract data type */
  24. typedef int ( * ListApplicationFunc)(int index, void *ptrToItem, void *callbackData);
  25. /* Basic List Operations */
  26. list_t ListCreate(int elementSize);
  27. int ListNumItems(list_t list);
  28. int ListInsertItem(list_t list, void *ptrToItem, int itemPosition);
  29. int ListInsertItems(list_t list, void *ptrToItems, int firstItemPosition, int numItemsToInsert);
  30. void ListDispose(list_t list);
  31. void *ListGetPtrToItem(list_t list, int itemPosition);
  32. void ListRemoveItem(list_t list, void *itemDestination, int itemPosition);
  33. void ListRemoveItems(list_t list, void *itemsDestination, int firstItemPosition, int numItemsToRemove);
  34. #if 0 /* rarely ever used; kept here for reference just in case ... */
  35. void ListDisposePtrList(list_t list);
  36. void ListGetItem(list_t list, void *itemDestination, int itemPosition);
  37. void ListReplaceItem(list_t list, void *ptrToItem, int itemPosition);
  38. void ListRemoveItem(list_t list, void *itemDestination, int itemPosition);
  39. void ListGetItems(list_t list, void *itemsDestination, int firstItemPosition, int numItemsToGet);
  40. void ListReplaceItems(list_t list, void *ptrToItems, int firstItemPosition, int numItemsToReplace);
  41. void ListRemoveItems(list_t list, void *itemsDestination, int firstItemPosition, int numItemsToRemove);
  42. list_t ListCopy(list_t originalList);
  43. int ListAppend(list_t list1, list_t list2);
  44. void ListClear(list_t list);
  45. int ListEqual(list_t list1, list_t list2);
  46. int ListInsertInOrder(list_t list, void *ptrToItem, CompareFunction compareFunction);
  47. void *ListGetDataPtr(list_t list);
  48. int ListApplyToEach(list_t list, int ascending, ListApplicationFunc funcToApply, void *callbackData);
  49. /* List Searching and Sorting */
  50. int ListFindItem(list_t list, void *ptrToItem, int startingPosition, CompareFunction compareFunction);
  51. void ListRemoveDuplicates(list_t list, CompareFunction compareFunction);
  52. int ListBinSearch(list_t list, void *itemPtr, CompareFunction compareFunction);
  53. void ListQuickSort(list_t list, CompareFunction compareFunction);
  54. void ListHeapSort(list_t list, CompareFunction compareFunction);
  55. void ListInsertionSort(list_t list, CompareFunction compareFunction);
  56. int ListIsSorted(list_t list, CompareFunction compareFunction);
  57. /* Advanced List Functions */
  58. void ListSetAllocationPolicy(list_t list, int minItemsPerAlloc, int percentIncreasePerAlloc);
  59. void ListCompact(list_t list);
  60. int ListPreAllocate(list_t list, int numItems);
  61. int ListGetItemSize(list_t list);
  62. int GetIntListFromParmInfo(va_list parmInfo, int numIntegers, list_t *integerList);
  63. int ListInsertAfterItem(list_t list, void *ptrToItem, void *ptrToItemToInsertAfter, CompareFunction compareFunction);
  64. int ListInsertBeforeItem(list_t list, void *ptrToItem, void *ptrToItemToInsertBefore, CompareFunction compareFunction);
  65. #endif /* 0 */
  66. #endif /* _LISTS_H_ */