]> git.donarmstrong.com Git - rsem.git/blobdiff - sam/ksort.h
Updated samtools to 0.1.19
[rsem.git] / sam / ksort.h
index 16a03fd1aad8be1d3b4a090b52c4daf37ae7b217..aa0bb93e2a703068a76eac007d949908337ffb65 100644 (file)
 /* Contact: Heng Li <lh3@sanger.ac.uk> */
 
 /*
+  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)