4 #include <lal/LALStdlib.h>
7 static void msort(
void *base,
size_t nobj,
size_t size,
void *params,
int (*compar)(
void *,
const void *,
const void *),
void *work)
10 typedef char type[size];
11 size_t n1 = nobj >> 1;
12 size_t n2 = nobj - n1;
13 type *a1 = (type *)base;
14 type *a2 = (type *)base + n1;
15 type *tmp = (type *)work;
17 msort(a1, n1, size, params, compar, work);
18 msort(a2, n2, size, params, compar, work);
20 while (n1 > 0 && n2 > 0) {
21 if (compar(params, a1, a2) > 0) {
22 memcpy(tmp++, a2++, size);
25 memcpy(tmp++, a1++, size);
30 memcpy(tmp, a1, n1 * size);
31 memcpy(base, work, (nobj - n2) * size);
36 int XLALMergeSort(
void *base,
size_t nobj,
size_t size,
void *params,
int (*compar)(
void *,
const void *,
const void *))
46 msort(base, nobj, size, params, compar, work);
static void msort(void *base, size_t nobj, size_t size, void *params, int(*compar)(void *, const void *, const void *), void *work)
int XLALMergeSort(void *base, size_t nobj, size_t size, void *params, int(*compar)(void *, const void *, const void *))
#define XLAL_CHECK(assertion,...)
Macro to test an assertion and invoke a failure if it is not true in a function that returns an integ...
@ XLAL_ENOMEM
Memory allocation error.
@ XLAL_EFAULT
Invalid pointer.
@ XLAL_EINVAL
Invalid argument.