Skip to content

Commit 1584872

Browse files
committed
better org
1 parent c3bf7a4 commit 1584872

File tree

1 file changed

+16
-23
lines changed

1 file changed

+16
-23
lines changed

src/kdtree.rs

+16-23
Original file line numberDiff line numberDiff line change
@@ -93,14 +93,11 @@ impl<A: Float + Zero + One, T: std::cmp::PartialEq, U: AsRef<[A]> + std::cmp::Pa
9393
.collect())
9494
}
9595

96-
pub fn within<F>(&self, point: &[A], radius: A, distance: &F) -> Result<Vec<(A, &T)>, ErrorKind>
96+
#[inline(always)]
97+
fn evaluated_heap<F>(&self, point: &[A], radius: A, distance: &F) -> BinaryHeap<HeapElement<A, &T>>
9798
where
9899
F: Fn(&[A], &[A]) -> A,
99100
{
100-
self.check_point(point)?;
101-
if self.size == 0 {
102-
return Ok(vec![]);
103-
}
104101
let mut pending = BinaryHeap::new();
105102
let mut evaluated = BinaryHeap::<HeapElement<A, &T>>::new();
106103
pending.push(HeapElement {
@@ -110,6 +107,18 @@ impl<A: Float + Zero + One, T: std::cmp::PartialEq, U: AsRef<[A]> + std::cmp::Pa
110107
while !pending.is_empty() && (-pending.peek().unwrap().distance <= radius) {
111108
self.nearest_step(point, self.size, radius, distance, &mut pending, &mut evaluated);
112109
}
110+
evaluated
111+
}
112+
113+
pub fn within<F>(&self, point: &[A], radius: A, distance: &F) -> Result<Vec<(A, &T)>, ErrorKind>
114+
where
115+
F: Fn(&[A], &[A]) -> A,
116+
{
117+
self.check_point(point)?;
118+
if self.size == 0 {
119+
return Ok(vec![]);
120+
}
121+
let evaluated = self.evaluated_heap(point, radius, distance);
113122
Ok(evaluated.into_sorted_vec().into_iter().map(Into::into).collect())
114123
}
115124

@@ -121,15 +130,7 @@ impl<A: Float + Zero + One, T: std::cmp::PartialEq, U: AsRef<[A]> + std::cmp::Pa
121130
if self.size == 0 {
122131
return Ok(vec![]);
123132
}
124-
let mut pending = BinaryHeap::new();
125-
let mut evaluated = BinaryHeap::<HeapElement<A, &T>>::new();
126-
pending.push(HeapElement {
127-
distance: A::zero(),
128-
element: self,
129-
});
130-
while !pending.is_empty() && (-pending.peek().unwrap().distance <= radius) {
131-
self.nearest_step(point, self.size, radius, distance, &mut pending, &mut evaluated);
132-
}
133+
let evaluated = self.evaluated_heap(point, radius, distance);
133134
Ok(evaluated.into_iter().map(Into::into).collect())
134135
}
135136

@@ -141,15 +142,7 @@ impl<A: Float + Zero + One, T: std::cmp::PartialEq, U: AsRef<[A]> + std::cmp::Pa
141142
if self.size == 0 {
142143
return Ok(0);
143144
}
144-
let mut pending = BinaryHeap::new();
145-
let mut evaluated = BinaryHeap::<HeapElement<A, &T>>::new();
146-
pending.push(HeapElement {
147-
distance: A::zero(),
148-
element: self,
149-
});
150-
while !pending.is_empty() && (-pending.peek().unwrap().distance <= radius) {
151-
self.nearest_step(point, self.size, radius, distance, &mut pending, &mut evaluated);
152-
}
145+
let evaluated = self.evaluated_heap(point, radius, distance);
153146
Ok(evaluated.len())
154147
}
155148

0 commit comments

Comments
 (0)