Changeset View
Changeset View
Standalone View
Standalone View
lib/libc/stdlib/qsort.c
Show First 20 Lines • Show All 53 Lines • ▼ Show 20 Lines | #define swapcode(TYPE, parmi, parmj, n) { \ | ||||
TYPE *pj = (TYPE *) (parmj); \ | TYPE *pj = (TYPE *) (parmj); \ | ||||
do { \ | do { \ | ||||
TYPE t = *pi; \ | TYPE t = *pi; \ | ||||
*pi++ = *pj; \ | *pi++ = *pj; \ | ||||
*pj++ = t; \ | *pj++ = t; \ | ||||
} while (--i > 0); \ | } while (--i > 0); \ | ||||
} | } | ||||
#define SWAPINIT(a, es) swaptype = ((char *)a - (char *)0) % sizeof(long) || \ | #define SWAPINIT(a, es) swaptype = ((char *)a - (char *)0) % sizeof(int) || \ | ||||
es % sizeof(long) ? 2 : es == sizeof(long)? 0 : 1; | es % sizeof(int) ? 2 : ((char *)a - (char *)0) % sizeof(long) ? 1 : \ | ||||
es != sizeof(long); | |||||
static inline void | static inline void | ||||
swapfunc(a, b, n, swaptype) | swapfunc(a, b, n, swaptype) | ||||
char *a, *b; | char *a, *b; | ||||
int n, swaptype; | int n, swaptype; | ||||
{ | { | ||||
if(swaptype <= 1) | if(swaptype <= 1) | ||||
swapcode(long, a, b, n) | swapcode(int, a, b, n) | ||||
else | else | ||||
swapcode(char, a, b, n) | swapcode(char, a, b, n) | ||||
} | } | ||||
#define swap(a, b) \ | #define swap(a, b) \ | ||||
if (swaptype == 0) { \ | if (swaptype == 0) { \ | ||||
long t = *(long *)(a); \ | long t = *(long *)(a); \ | ||||
*(long *)(a) = *(long *)(b); \ | *(long *)(a) = *(long *)(b); \ | ||||
▲ Show 20 Lines • Show All 116 Lines • Show Last 20 Lines |