use crate::Nucleotide;
pub struct SeqIter<'a> {
offset: usize,
full_last: bool,
data: &'a [u8],
}
impl<'a> Iterator for SeqIter<'a> {
type Item = Nucleotide;
fn next(&mut self) -> Option<Self::Item> {
let total_size = self.data.len() * 2 - if self.full_last { 0 } else { 1 };
if self.offset < total_size {
let code = (self.data[self.offset / 2] >> (((1 + self.offset) % 2) * 4)) & 0xf;
self.offset += 1;
return Some(code.into());
}
None
}
}
impl<'a> super::Alignment<'a> {
pub fn sequence(&self) -> SeqIter {
let (data, full_last) = self.raw_seq();
SeqIter {
offset: 0,
full_last,
data,
}
}
pub fn per_base_qual(&self) -> &[u8] {
self.raw_per_base_qual()
}
}