15static _Thread_local int (*
gv_sort_compar)(
const void *,
const void *,
void *);
24static inline void gv_sort(
void *base,
size_t nmemb,
size_t size,
25 int (*compar)(
const void *,
const void *,
void *),
28 "unsupported recursive call to gv_sort");
42static inline int sort_place_cmp(
const void *a,
const void *b,
void *context) {
43 const int *
const x = a;
44 const int *
const y = b;
45 const double *
const place = context;
47 if (place[*x] < place[*y]) {
50 if (place[*x] > place[*y]) {
57static inline void sort_place(
double *place,
int *ordering,
size_t size) {
static _Thread_local void * gv_sort_arg
static _Thread_local int(* gv_sort_compar)(const void *, const void *, void *)
static void gv_sort(void *base, size_t nmemb, size_t size, int(*compar)(const void *, const void *, void *), void *arg)
qsort with an extra state parameter, ala qsort_r
static void sort_place(double *place, int *ordering, size_t size)
sort an array of doubles based on an list of their desired order
static int sort_place_cmp(const void *a, const void *b, void *context)
comparator for sort_place
static int gv_sort_compar_wrapper(const void *a, const void *b)