pub mod canonical;
pub mod encoding;
pub mod operations;
pub mod validation;
pub use canonical::canonical_kmer;
pub use encoding::{
decode_kmer, decode_kmer_u128, decode_kmer_u64, encode_kmer, encode_kmer_u128, encode_kmer_u64,
};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct Kmer {
value: u128,
k_size: u8,
}
impl Kmer {
pub fn new(value: u128, k_size: u8) -> Self {
Self { value, k_size }
}
pub fn value(&self) -> u128 {
self.value
}
pub fn k_size(&self) -> u8 {
self.k_size
}
pub fn fits_in_u64(&self) -> bool {
self.k_size <= 32
}
pub fn as_u64(&self) -> Option<u64> {
if self.fits_in_u64() {
Some(self.value as u64)
} else {
None
}
}
}