My library
Library for common tasks
macros.h
Go to the documentation of this file.
1
9#ifndef SEEN_MACROS
10#define SEEN_MACROS
11
12#include "types.h"
13#include <string.h>
14
24#define cmpVal(a, b) _Generic((a, b), char * \
25 : charCmp, int * \
26 : intCmp, float * \
27 : floatCmp, double * \
28 : doubleCmp, void ** \
29 : ptrCmp)(a, b)
30
37#define bubbleSortArr(arr, size) _Generic(arr, char * \
38 : charBubbleSortArr, int * \
39 : intBubbleSortArr, float * \
40 : floatBubbleSortArr, double * \
41 : doubleBubbleSortArr, void ** \
42 : ptrBubbleSortArr)(arr, size)
43
50#define quickSortArr(arr, size, ...) _Generic(arr, char * \
51 : charQuickSortArr, int * \
52 : intQuickSortArr, float * \
53 : floatQuickSortArr, double * \
54 : doubleQuickSortArr, void ** \
55 : ptrQuickSortArr)(arr, size, ...)
56
63#define newALFromArray(arr, size) _Generic(arr, char * \
64 : newALFromCharArray, int * \
65 : newALFromIntArray, float * \
66 : newALFromFloatArray, double * \
67 : newALFromDoubleArray, void ** \
68 : newALFromPtrArray)(arr, size)
69
76#define newLLFromArray(arr, size) _Generic(arr, char * \
77 : newLLFromCharArray, int * \
78 : newLLFromIntArray, float * \
79 : newLLFromFloatArray, double * \
80 : newLLFromDoubleArray, void ** \
81 : newLLFromPtrArray)(arr, size)
82
89#define newStackFromArray(arr, size) _Generic(arr, char * \
90 : newStackFromCharArray, int * \
91 : newStackFromIntArray, float * \
92 : newStackFromFloatArray, double * \
93 : newStackFromDoubleArray, void ** \
94 : newStackFromPtrArray)(arr, size)
95
102#define newQueueFromArray(arr, size) _Generic(arr, char * \
103 : newQueueFromCharArray, int * \
104 : newQueueFromIntArray, float * \
105 : newQueueFromFloatArray, double * \
106 : newQueueFromDoubleArray, void ** \
107 : newQueueFromPtrArray)(arr, size)
108
115#define newStackFromArray(arr, size) _Generic(arr, char * \
116 : newStackFromCharArray, int * \
117 : newStackFromIntArray, float * \
118 : newStackFromFloatArray, double * \
119 : newStackFromDoubleArray, void ** \
120 : newStackFromPtrArray)(arr, size)
121
127#define print(spec, collection) _Generic(collection, ArrayList \
128 : printAL, LinkedList \
129 : printLL, Stack \
130 : printStack, Queue \
131 : printQueue)(spec, collection)
132
139#define areEqual(collection1, collection2) _Generic(collection1, ArrayList \
140 : areALEqual, LinkedList \
141 : areLLEqual, Stack \
142 : areStacksEqual, Queue \
143 : areQueuesEqual)(collection1, collection2)
144
150#define append(list, item) _Generic(list, ArrayList \
151 : appendToAL, LinkedList \
152 : appendToLL)(list, item)
153
160#define insert(list, index, item) _Generic(list, ArrayList \
161 : insertToAL, LinkedList \
162 : insertToLL)(list, index, item)
163
170#define set(list, index, newItem) _Generic(list, ArrayList \
171 : setALItem, LinkedList \
172 : setLLItem)(list, index, newItem)
173
180#define merge(list1, list2) _Generic(list1, ArrayList \
181 : mergeAL, LinkedList \
182 : mergeLL)(list1, list2)
183
190#define slice(list, begin, end) _Generic(list, ArrayList \
191 : sliceAL, LinkedList \
192 : sliceLL)(list, begin, end)
193
199#define removeItem(list, index) _Generic(list, ArrayList \
200 : removeFromAL, LinkedList \
201 : removeFromLL)(list, index)
202
209#define getItem(list, index, dest) _Generic(list, ArrayList \
210 : getFromAL, LinkedList \
211 : getFromLL)(list, index, dest)
212
217#define delete(collection) _Generic(collection, ArrayList \
218 : deleteAL, LinkedList \
219 : deleteLL, Stack \
220 : deleteStack, Queue \
221 : deleteQueue)(collection)
222
231#define isIn(collection, item) _Generic(collection, ArrayList \
232 : isInAL, LinkedList \
233 : isInLL, Stack \
234 : isInStack, Queue \
235 : isInQueue)(collection, item)
236
242#define getLength(collection) _Generic(collection, ArrayList \
243 : getALLength, LinkedList \
244 : getLLLength, Stack \
245 : getStackLength, Queue \
246 : getQueueLength, string \
247 : strlen)(collection)
248
257#define linearSearch(list, key) _Generic(list, ArrayList \
258 : linearSearchAL, LinkedList \
259 : linearSearchLL)(list, key)
260
265#define deleteHead(collection) _Generic(list, Stack \
266 : deleteHeadFromStack, Queue \
267 : deleteHeadFromQueue)(collection)
268
275#define isEmpty(collection) _Generic(collection, ArrayList \
276 : isALEmpty, LinkedList \
277 : isLLEmpty, Stack \
278 : isStackEmpty, Queue \
279 : isQueueEmpty)(collection, item)
280
286#define peek(collection, dest) _Generic(list, Stack \
287 : peekStack, Queue \
288 : peekQueue)(collection)
289#endif
Collection of useful types.