kd-tree 0.6.2

k-dimensional tree
Documentation
#![cfg(feature = "nalgebra")]
use super::KdPoint;

macro_rules! impl_kdpoint_for_nalgebra_point {
    ($($dim:literal),*) => {
        $(
            paste::paste! {
                impl<Scalar> KdPoint for nalgebra::Point<Scalar, $dim>
                where
                    Scalar: num_traits::NumAssign + Copy + PartialOrd + nalgebra::Scalar,
                {
                    type Scalar = Scalar;
                    type Dim = typenum::[<U $dim>];
                    fn at(&self, k: usize) -> Scalar {
                        self[k]
                    }
                }
            }
        )*
    };
}

macro_rules! impl_kdpoint_for_nalgebra_vector {
    ($($dim:literal),*) => {
        $(
            paste::paste! {
                impl<Scalar, Storage> KdPoint for nalgebra::Vector<Scalar, nalgebra::Const<$dim>, Storage>
                where
                    Scalar: num_traits::NumAssign + Copy + PartialOrd + nalgebra::Scalar,
                    Storage: nalgebra::StorageMut<Scalar, nalgebra::Const<$dim>>
                {
                    type Scalar = Scalar;
                    type Dim = typenum::[<U $dim>];
                    fn at(&self, k: usize) -> Scalar {
                        self[k]
                    }
                }
            }
        )*
    };
}

impl_kdpoint_for_nalgebra_point!(1, 2, 3, 4, 5, 6, 7, 8);
impl_kdpoint_for_nalgebra_vector!(1, 2, 3, 4, 5, 6, 7, 8);