X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=ksort.h;h=aa0bb93e2a703068a76eac007d949908337ffb65;hb=607d7a0ab79152be4153fa09861cfa889488f2c7;hp=16a03fd1aad8be1d3b4a090b52c4daf37ae7b217;hpb=f93dae0d03856955f9424e8b2aaf261304ca647e;p=samtools.git diff --git a/ksort.h b/ksort.h index 16a03fd..aa0bb93 100644 --- a/ksort.h +++ b/ksort.h @@ -26,6 +26,10 @@ /* Contact: Heng Li */ /* + 2012-12-11 (0.1.4): + + * Defined __ks_insertsort_##name as static to compile with C99. + 2008-11-16 (0.1.4): * Fixed a bug in introsort() that happens in rare cases. @@ -141,7 +145,7 @@ typedef struct { tmp = *l; *l = l[i]; l[i] = tmp; ks_heapadjust_##name(0, i, l); \ } \ } \ - inline void __ks_insertsort_##name(type_t *s, type_t *t) \ + static inline void __ks_insertsort_##name(type_t *s, type_t *t) \ { \ type_t *i, *j, swap_tmp; \ for (i = s + 1; i < t; ++i) \ @@ -250,6 +254,15 @@ typedef struct { if (hh <= k) low = ll; \ if (hh >= k) high = hh - 1; \ } \ + } \ + void ks_shuffle_##name(size_t n, type_t a[]) \ + { \ + int i, j; \ + for (i = n; i > 1; --i) { \ + type_t tmp; \ + j = (int)(drand48() * i); \ + tmp = a[j]; a[j] = a[i-1]; a[i-1] = tmp; \ + } \ } #define ks_mergesort(name, n, a, t) ks_mergesort_##name(n, a, t) @@ -259,6 +272,7 @@ typedef struct { #define ks_heapmake(name, n, a) ks_heapmake_##name(n, a) #define ks_heapadjust(name, i, n, a) ks_heapadjust_##name(i, n, a) #define ks_ksmall(name, n, a, k) ks_ksmall_##name(n, a, k) +#define ks_shuffle(name, n, a) ks_shuffle_##name(n, a) #define ks_lt_generic(a, b) ((a) < (b)) #define ks_lt_str(a, b) (strcmp((a), (b)) < 0)