From 33423e156883e81ec0b0418f2f1658f447dc45d3 Mon Sep 17 00:00:00 2001 From: Heng Li Date: Sat, 2 Sep 2017 21:05:03 -0400 Subject: [PATCH] get rid of the last var-sized array in ksort for MSVC --- ksort.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ksort.h b/ksort.h index 1f2a3dd..899ebd2 100644 --- a/ksort.h +++ b/ksort.h @@ -30,6 +30,7 @@ #include #include +#include typedef struct { void *left, *right; @@ -78,6 +79,7 @@ typedef const char *ksstr_t; #define KSORT_INIT_STR KSORT_INIT(str, ksstr_t, ks_lt_str) #define RS_MIN_SIZE 64 +#define RS_MAX_BITS 8 #define KRADIX_SORT_INIT(name, rstype_t, rskey, sizeof_key) \ typedef struct { \ @@ -98,7 +100,8 @@ typedef const char *ksstr_t; { \ rstype_t *i; \ int size = 1<b = k->e = beg; \ for (i = beg; i != end; ++i) ++b[rskey(*i)>>s&m].e; \ for (k = b + 1; k != be; ++k) \ @@ -127,7 +130,7 @@ typedef const char *ksstr_t; void radix_sort_##name(rstype_t *beg, rstype_t *end) \ { \ if (end - beg <= RS_MIN_SIZE) rs_insertsort_##name(beg, end); \ - else rs_sort_##name(beg, end, 8, sizeof_key * 8 - 8); \ + else rs_sort_##name(beg, end, RS_MAX_BITS, (sizeof_key - 1) * RS_N_BITS); \ } #endif