24#define cmpVal(a, b) _Generic((a, b), char * \
27 : floatCmp, double * \
28 : doubleCmp, void ** \
37#define bubbleSortArr(arr, size) _Generic(arr, char * \
38 : charBubbleSortArr, int * \
39 : intBubbleSortArr, float * \
40 : floatBubbleSortArr, double * \
41 : doubleBubbleSortArr, void ** \
42 : ptrBubbleSortArr)(arr, size)
50#define quickSortArr(arr, size, ...) _Generic(arr, char * \
51 : charQuickSortArr, int * \
52 : intQuickSortArr, float * \
53 : floatQuickSortArr, double * \
54 : doubleQuickSortArr, void ** \
55 : ptrQuickSortArr)(arr, size, ...)
63#define newALFromArray(arr, size) _Generic(arr, char * \
64 : newALFromCharArray, int * \
65 : newALFromIntArray, float * \
66 : newALFromFloatArray, double * \
67 : newALFromDoubleArray, void ** \
68 : newALFromPtrArray)(arr, size)
76#define newLLFromArray(arr, size) _Generic(arr, char * \
77 : newLLFromCharArray, int * \
78 : newLLFromIntArray, float * \
79 : newLLFromFloatArray, double * \
80 : newLLFromDoubleArray, void ** \
81 : newLLFromPtrArray)(arr, size)
89#define newStackFromArray(arr, size) _Generic(arr, char * \
90 : newStackFromCharArray, int * \
91 : newStackFromIntArray, float * \
92 : newStackFromFloatArray, double * \
93 : newStackFromDoubleArray, void ** \
94 : newStackFromPtrArray)(arr, size)
102#define newQueueFromArray(arr, size) _Generic(arr, char * \
103 : newQueueFromCharArray, int * \
104 : newQueueFromIntArray, float * \
105 : newQueueFromFloatArray, double * \
106 : newQueueFromDoubleArray, void ** \
107 : newQueueFromPtrArray)(arr, size)
115#define newStackFromArray(arr, size) _Generic(arr, char * \
116 : newStackFromCharArray, int * \
117 : newStackFromIntArray, float * \
118 : newStackFromFloatArray, double * \
119 : newStackFromDoubleArray, void ** \
120 : newStackFromPtrArray)(arr, size)
127#define print(spec, collection) _Generic(collection, ArrayList \
128 : printAL, LinkedList \
130 : printStack, Queue \
131 : printQueue)(spec, collection)
139#define areEqual(collection1, collection2) _Generic(collection1, ArrayList \
140 : areALEqual, LinkedList \
141 : areLLEqual, Stack \
142 : areStacksEqual, Queue \
143 : areQueuesEqual)(collection1, collection2)
150#define append(list, item) _Generic(list, ArrayList \
151 : appendToAL, LinkedList \
152 : appendToLL)(list, item)
160#define insert(list, index, item) _Generic(list, ArrayList \
161 : insertToAL, LinkedList \
162 : insertToLL)(list, index, item)
170#define set(list, index, newItem) _Generic(list, ArrayList \
171 : setALItem, LinkedList \
172 : setLLItem)(list, index, newItem)
180#define merge(list1, list2) _Generic(list1, ArrayList \
181 : mergeAL, LinkedList \
182 : mergeLL)(list1, list2)
190#define slice(list, begin, end) _Generic(list, ArrayList \
191 : sliceAL, LinkedList \
192 : sliceLL)(list, begin, end)
199#define removeItem(list, index) _Generic(list, ArrayList \
200 : removeFromAL, LinkedList \
201 : removeFromLL)(list, index)
209#define getItem(list, index, dest) _Generic(list, ArrayList \
210 : getFromAL, LinkedList \
211 : getFromLL)(list, index, dest)
217#define delete(collection) _Generic(collection, ArrayList \
218 : deleteAL, LinkedList \
220 : deleteStack, Queue \
221 : deleteQueue)(collection)
231#define isIn(collection, item) _Generic(collection, ArrayList \
232 : isInAL, LinkedList \
235 : isInQueue)(collection, item)
242#define getLength(collection) _Generic(collection, ArrayList \
243 : getALLength, LinkedList \
244 : getLLLength, Stack \
245 : getStackLength, Queue \
246 : getQueueLength, string \
247 : strlen)(collection)
257#define linearSearch(list, key) _Generic(list, ArrayList \
258 : linearSearchAL, LinkedList \
259 : linearSearchLL)(list, key)
265#define deleteHead(collection) _Generic(list, Stack \
266 : deleteHeadFromStack, Queue \
267 : deleteHeadFromQueue)(collection)
275#define isEmpty(collection) _Generic(collection, ArrayList \
276 : isALEmpty, LinkedList \
278 : isStackEmpty, Queue \
279 : isQueueEmpty)(collection, item)
286#define peek(collection, dest) _Generic(list, Stack \
288 : peekQueue)(collection)
Collection of useful types.