xref: /optee_os/lib/libutils/ext/qsort_helpers.c (revision fa4b4621b3faaed9903c0eefe39951d7dd57d4ee)
1*fa4b4621SEtienne Carriere // SPDX-License-Identifier: BSD-2-Clause
2*fa4b4621SEtienne Carriere /*
3*fa4b4621SEtienne Carriere  * Copyright (c) 2024, STMicroelectronics
4*fa4b4621SEtienne Carriere  */
5*fa4b4621SEtienne Carriere 
6*fa4b4621SEtienne Carriere #include <stdlib.h>
7*fa4b4621SEtienne Carriere #include <util.h>
8*fa4b4621SEtienne Carriere 
9*fa4b4621SEtienne Carriere #define QSORT_HELPER(name, type)				\
10*fa4b4621SEtienne Carriere static int cmp_ ## name(const void *a, const void *b)		\
11*fa4b4621SEtienne Carriere {								\
12*fa4b4621SEtienne Carriere 	const type *ia = a;					\
13*fa4b4621SEtienne Carriere 	const type *ib = b;					\
14*fa4b4621SEtienne Carriere 								\
15*fa4b4621SEtienne Carriere 	return CMP_TRILEAN(*ia, *ib);				\
16*fa4b4621SEtienne Carriere }								\
17*fa4b4621SEtienne Carriere 								\
18*fa4b4621SEtienne Carriere void qsort_ ## name(type *aa, size_t n)				\
19*fa4b4621SEtienne Carriere {								\
20*fa4b4621SEtienne Carriere 	qsort(aa, n, sizeof(*aa), cmp_ ## name);		\
21*fa4b4621SEtienne Carriere }
22*fa4b4621SEtienne Carriere 
23*fa4b4621SEtienne Carriere QSORT_HELPER(int, int);
24*fa4b4621SEtienne Carriere QSORT_HELPER(uint, unsigned int);
25*fa4b4621SEtienne Carriere QSORT_HELPER(long, long int);
26*fa4b4621SEtienne Carriere QSORT_HELPER(ul, unsigned long int);
27*fa4b4621SEtienne Carriere QSORT_HELPER(ll, long long int);
28*fa4b4621SEtienne Carriere QSORT_HELPER(ull, unsigned long long int);
29*fa4b4621SEtienne Carriere QSORT_HELPER(s8, int8_t);
30*fa4b4621SEtienne Carriere QSORT_HELPER(u8, uint8_t);
31*fa4b4621SEtienne Carriere QSORT_HELPER(s16, int16_t);
32*fa4b4621SEtienne Carriere QSORT_HELPER(u16, uint16_t);
33*fa4b4621SEtienne Carriere QSORT_HELPER(s32, int32_t);
34*fa4b4621SEtienne Carriere QSORT_HELPER(u32, uint32_t);
35*fa4b4621SEtienne Carriere QSORT_HELPER(s64, int64_t);
36*fa4b4621SEtienne Carriere QSORT_HELPER(u64, uint64_t);
37