quadrank 0.2.0

Fast rank over binary and size-4 DNA alphabets.
Documentation
use crate::binary::BiRanker;
use dyn_size_of::GetSize;

pub use bitm::RankSelect101111;
pub use bitm::RankSimple;

impl BiRanker for bitm::RankSimple {
    fn new_packed(seq: &[u64]) -> Self {
        Self::build(seq.to_vec().into()).0
    }

    fn size(&self) -> usize {
        self.size_bytes()
    }

    unsafe fn rank_unchecked(&self, pos: usize) -> u64 {
        unsafe { bitm::Rank::rank_unchecked(self, pos) as u64 }
    }
}

impl BiRanker for bitm::RankSelect101111 {
    fn new_packed(seq: &[u64]) -> Self {
        Self::build(seq.to_vec().into()).0
    }

    fn size(&self) -> usize {
        self.size_bytes()
    }

    const HAS_PREFETCH: bool = true;

    fn prefetch(&self, pos: usize) {
        bitm::Rank::prefetch(self, pos);
    }

    unsafe fn rank_unchecked(&self, pos: usize) -> u64 {
        unsafe { bitm::Rank::rank_unchecked(self, pos) as u64 }
    }
}