use crate::{
results::QueryAlignment,
reference::{
Reference,
DefaultSequenceBuffer,
}
};
pub mod algorithms;
use algorithms::Algorithm;
mod debug;
#[derive(Clone)]
pub struct Aligner<A: Algorithm> {
algorithm: A,
sequence_buffer: DefaultSequenceBuffer,
}
impl<A: Algorithm> Aligner<A> {
pub fn new(algorithm: A) -> Self {
Self::from(algorithm)
}
pub fn align(&mut self, query: &[u8], reference: &Reference) -> QueryAlignment {
self.algorithm.align(query, reference, &mut self.sequence_buffer)
}
}
impl<A: Algorithm> From<A> for Aligner<A> {
fn from(algorithm: A) -> Self {
Self {
algorithm,
sequence_buffer: Reference::get_sequence_buffer(),
}
}
}