diff --git a/src/kdtree/buffors.rs b/src/kdtree/buffors.rs deleted file mode 100644 index 0fef572..0000000 --- a/src/kdtree/buffors.rs +++ /dev/null @@ -1,24 +0,0 @@ -use ::kdtree::KdtreePointTrait; - -pub trait KdtreeBuffor { - fn nearest_search(&self, node : &KdtreePoint) -> Option; - fn has_neighbor_in_range(&self, node : &KdtreePoint) -> bool; -} - -pub struct FakeKdtreeBuffor { -} - -impl FakeKdtreeBuffor { - pub fn new() -> FakeKdtreeBuffor { - FakeKdtreeBuffor {} - } -} - -impl KdtreeBuffor for FakeKdtreeBuffor { - fn nearest_search(&self, node : &KdtreePoint) -> Option { - None - } - fn has_neighbor_in_range(&self, node : &KdtreePoint) -> bool { - false - } -} diff --git a/src/kdtree/mod.rs b/src/kdtree/mod.rs index 74502b1..93444d4 100644 --- a/src/kdtree/mod.rs +++ b/src/kdtree/mod.rs @@ -2,32 +2,23 @@ pub mod test_common; pub mod distance; -pub mod buffors; mod partition; mod bounds; use self::bounds::*; use self::distance::*; -use self::buffors::*; pub trait KdtreePointTrait: Copy { fn dims(&self) -> &[f64]; } -pub struct Kdtree { +pub struct Kdtree { nodes: Vec>, - buffor : KdtreeBuffor, } -impl Kdtree { - pub fn new(mut points: &mut [KdtreePoint]) -> Kdtree { - Kdtree::new_with_buffor(&mut points, FakeKdtreeBuffor{}) - } -} - -impl > Kdtree { - pub fn new_with_buffor(mut points: &mut [KdtreePoint], buffor : Buffor) -> Kdtree { +impl Kdtree { + pub fn new(mut points: &mut [KdtreePoint]) -> Kdtree { if points.len() == 0 { panic!("empty vector point not allowed"); } @@ -36,7 +27,6 @@ impl > Kdtree > Kdtree > Kdtree, parent_splits_dimension_on : f64, node_value_on_dimension : f64) -> (Option,Option) { + if node_value_on_dimension <= parent_splits_dimension_on { + (parent.left_node, parent.right_node) + } else { + (parent.right_node, parent.left_node) + } + } + fn add_node(&mut self, p: KdtreePoint, dimension: usize, split_on: f64) -> usize { let node = KdtreeNode::new(p, dimension, split_on); diff --git a/src/kdtree/partition.rs b/src/kdtree/partition.rs index 5cb8e96..a0e922b 100644 --- a/src/kdtree/partition.rs +++ b/src/kdtree/partition.rs @@ -186,7 +186,6 @@ mod tests { } #[test] - #[ignore] fn partition_given_midpoint_exactly_in_between_points_returns_smaller_index() { let p1 = Point2WithId::new(1, 2., 4.); let p2 = Point2WithId::new(1, 4., 6.); @@ -197,7 +196,6 @@ mod tests { } #[test] - #[ignore] fn partition_given_midpoint_which_has_all_points_on_one_side_slides_split_plane_and_returns_index_to_closest_element() { let p1 = Point2WithId::new(1, 2., 4.); let p2 = Point2WithId::new(2, 4., 6.);