use distances::Number;
use crate::{Dataset, Tree};
pub(crate) mod clustered;
pub(crate) mod linear;
#[derive(Clone, Copy, Debug)]
pub enum Algorithm {
Linear,
Clustered,
}
impl Default for Algorithm {
fn default() -> Self {
Self::Clustered
}
}
impl Algorithm {
pub(crate) fn search<T, U, D>(self, query: T, radius: U, tree: &Tree<T, U, D>) -> Vec<(usize, U)>
where
T: Send + Sync + Copy,
U: Number,
D: Dataset<T, U>,
{
match self {
Self::Linear => linear::search(tree.data(), query, radius, tree.indices()),
Self::Clustered => clustered::search(tree, query, radius),
}
}
}