use crate::{Axis, Content, LeafStrategy, StemStrategy};
pub trait StemLeafResolution {
fn uses_arithmetic(&self) -> bool;
fn resolve_terminal_stem_idx(&self, stem_idx: usize, arithmetic_leaf_idx: usize) -> usize;
fn is_terminal_stem_idx(&self, stem_idx: usize) -> bool;
}
pub trait KdTreeAccessor<A, T, SS, LS, const K: usize, const B: usize>
where
A: Axis<Coord = A>,
T: Content,
SS: StemStrategy,
LS: LeafStrategy<A, T, SS, K, B>,
{
fn stems(&self) -> &[A];
fn leaves(&self) -> &LS;
fn stem_leaf_resolution(&self) -> &impl StemLeafResolution;
fn size(&self) -> usize;
fn max_stem_level(&self) -> i32;
fn max_leaf_len(&self) -> usize;
#[inline]
fn leaf_count(&self) -> usize {
self.leaves().leaf_count()
}
}