/** * Initialize buffer for next interval. * This should only be invoked if the buffer is empty. * Returns true if successful. */ bool BCFSyncedReader::initialize_next_interval() { if (random_access) { while (intervals_index < intervals.size()) { GenomeInterval interval = intervals[intervals_index++]; for (size_t i=0; i<nfiles; ++i) { hts_itr_destroy(itrs[i]); itrs[i] = 0; interval.to_string(&s); if (ftypes[i].format==bcf) { itrs[i] = bcf_itr_querys(idxs[i], hdrs[i], s.s); } else if (ftypes[i].format==vcf) { itrs[i] = tbx_itr_querys(tbxs[i], s.s); } fill_buffer(i); } //make sure pq is not empty //it is possible for the pq to be empty as iterators may be returned //as the sequence might be a valid sequence stated in the header if (pq.size()!=0) { return true; } } return false; } else { for (size_t i=0; i<nfiles; ++i) { fill_buffer(i); } if (pq.size()!=0) { return true; } return false; } }
/** * Initialize buffer for next interval. * This should only be invoked if the buffer is empty. * Returns true if successful. */ bool BCFSyncedStreamReader::initialize_next_interval() { while (intervals_index < intervals.size()) { GenomeInterval interval = intervals[intervals_index++]; for (int32_t i = 0; i<nfiles; ++i) { int32_t ftype = hts_file_type(vcf_files[i].c_str()); hts_itr_destroy(itrs[i]); itrs[i] = 0; interval.to_string(&s); if (ftype==FT_BCF_GZ) { itrs[i] = bcf_itr_querys(idxs[i], hdrs[i], s.s); } else if (ftype==FT_VCF_GZ) { itrs[i] = tbx_itr_querys(tbxs[i], s.s); } fill_buffer(i); } //make sure pq is not empty //it is possible for the pq to be empty as iterators may be returned //as the sequence might be a valid sequence stated in the header if (pq.size()!=0) { return true; } } return false; }