uint8_t *data;
} bam1_t;
-typedef struct __bam_iterf_t *bam_iterf_t;
+typedef struct __bam_iter_t *bam_iter_t;
#define bam1_strand(b) (((b)->core.flag&BAM_FREVERSE) != 0)
#define bam1_mstrand(b) (((b)->core.flag&BAM_FMREVERSE) != 0)
*/
int bam_fetch(bamFile fp, const bam_index_t *idx, int tid, int beg, int end, void *data, bam_fetch_f func);
- bam_iterf_t bam_iterf_query(const bam_index_t *idx, int tid, int beg, int end);
- int bam_iterf_read(bamFile fp, bam_iterf_t iter, bam1_t *b);
- void bam_iterf_destroy(bam_iterf_t iter);
+ bam_iter_t bam_iter_query(const bam_index_t *idx, int tid, int beg, int end);
+ int bam_iter_read(bamFile fp, bam_iter_t iter, bam1_t *b);
+ void bam_iter_destroy(bam_iter_t iter);
/*!
@abstract Parse a region in the format: "chr2:100,000-200,000".
return (rend > beg && rbeg < end);
}
-struct __bam_iterf_t {
+struct __bam_iter_t {
int from_first; // read from the first record; no random access
int tid, beg, end, n_off, i, finished;
uint64_t curr_off;
};
// bam_fetch helper function retrieves
-bam_iterf_t bam_iterf_query(const bam_index_t *idx, int tid, int beg, int end)
+bam_iter_t bam_iter_query(const bam_index_t *idx, int tid, int beg, int end)
{
uint16_t *bins;
int i, n_bins, n_off;
khint_t k;
khash_t(i) *index;
uint64_t min_off;
- bam_iterf_t iter = 0;
+ bam_iter_t iter = 0;
if (beg < 0) beg = 0;
if (end < beg) return 0;
// initialize iter
- iter = calloc(1, sizeof(struct __bam_iterf_t));
+ iter = calloc(1, sizeof(struct __bam_iter_t));
iter->tid = tid, iter->beg = beg, iter->end = end; iter->i = -1;
//
bins = (uint16_t*)calloc(MAX_BIN, 2);
pair64_t *get_chunk_coordinates(const bam_index_t *idx, int tid, int beg, int end, int *cnt_off)
{ // for pysam compatibility
- bam_iterf_t iter;
+ bam_iter_t iter;
pair64_t *off;
- iter = bam_iterf_query(idx, tid, beg, end);
+ iter = bam_iter_query(idx, tid, beg, end);
off = iter->off; *cnt_off = iter->n_off;
free(iter);
return off;
}
-void bam_iterf_destroy(bam_iterf_t iter)
+void bam_iter_destroy(bam_iter_t iter)
{
if (iter) { free(iter->off); free(iter); }
}
-int bam_iterf_read(bamFile fp, bam_iterf_t iter, bam1_t *b)
+int bam_iter_read(bamFile fp, bam_iter_t iter, bam1_t *b)
{
if (iter->finished) return -1;
if (iter->from_first) {
int bam_fetch(bamFile fp, const bam_index_t *idx, int tid, int beg, int end, void *data, bam_fetch_f func)
{
- bam_iterf_t iter;
+ bam_iter_t iter;
bam1_t *b;
b = bam_init1();
- iter = bam_iterf_query(idx, tid, beg, end);
- while (bam_iterf_read(fp, iter, b) >= 0) func(b, data);
+ iter = bam_iter_query(idx, tid, beg, end);
+ while (bam_iter_read(fp, iter, b) >= 0) func(b, data);
bam_destroy1(b);
return 0;
}
typedef struct {
bamFile fp;
- bam_iterf_t iter;
+ bam_iter_t iter;
} mplp_aux_t;
static int mplp_func(void *data, bam1_t *b)
{
mplp_aux_t *ma = (mplp_aux_t*)data;
- if (ma->iter) return bam_iterf_read(ma->fp, ma->iter, b);
+ if (ma->iter) return bam_iter_read(ma->fp, ma->iter, b);
return bam_read1(ma->fp, b);
}
exit(1);
}
if (i == 0) beg0 = beg, end0 = end;
- data[i]->iter = bam_iterf_query(idx, tid, beg, end);
+ data[i]->iter = bam_iter_query(idx, tid, beg, end);
bam_index_destroy(idx);
}
if (i == 0) h = h_tmp;
bam_header_destroy(h);
for (i = 0; i < n; ++i) {
bam_close(data[i]->fp);
- if (data[i]->iter) bam_iterf_destroy(data[i]->iter);
+ if (data[i]->iter) bam_iter_destroy(data[i]->iter);
free(data[i]);
}
free(data); free(plp); free(ref); free(n_plp);