}
#define __skip_tag(s) do { \
- int type = toupper(*(s)); \
- ++(s); \
- if (type == 'C' || type == 'A') ++(s); \
- else if (type == 'S') (s) += 2; \
- else if (type == 'I' || type == 'F') (s) += 4; \
- else if (type == 'D') (s) += 8; \
- else if (type == 'Z' || type == 'H') { while (*(s)) ++(s); ++(s); } \
- } while (0)
+ int type = toupper(*(s)); \
+ ++(s); \
+ if (type == 'Z' || type == 'H') { while (*(s)) ++(s); ++(s); } \
+ else if (type == 'B') (s) += 5 + bam_aux_type2size(*(s)) * (*(int32_t*)((s)+1)); \
+ else (s) += bam_aux_type2size(type); \
+ } while(0)
uint8_t *bam_aux_get(const bam1_t *b, const char tag[2])
{
*ref_id = kh_value(h, iter);
if (i == k) { /* dump the whole sequence */
*begin = 0; *end = 1<<29; free(s);
- return -1;
+ return 0;
}
for (p = s + i + 1; i != k; ++i) if (s[i] == '-') break;
*begin = atoi(p);
if (type == 'Z' || type == 'H') return (char*)s;
else return 0;
}
+
+#ifdef _WIN32
+double drand48()
+{
+ return (double)rand() / RAND_MAX;
+}
+#endif