From fdc783b87c0bdab652bbe096adab165fe125ccc8 Mon Sep 17 00:00:00 2001 From: Joe Date: Fri, 17 Oct 2025 17:14:48 -0700 Subject: [PATCH] multithread the creation of the index --- src/lib.rs | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 2f34658..d77eaef 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -65,22 +65,32 @@ pub struct Spindex2d { impl Spindex2d { pub fn new(points: &[Point2d]) -> Self { let mut xpoints = Vec::with_capacity(points.len()); - let mut ypoints = Vec::with_capacity(points.len()); let mut xs = Vec::with_capacity(points.len()); - let mut ys = Vec::with_capacity(points.len()); - for (i, point) in points.iter().enumerate() { - let x = PVal::new(i, point.x); - xs.push(x); - let y = PVal::new(i, point.y); - ys.push(y); - xpoints.push(i); - ypoints.push(i); - } + let mut ypoints = Vec::with_capacity(points.len()); + let mut ys = Vec::with_capacity(points.len()); + + thread::scope(|s| { + s.spawn(|| { + for (i, point) in points.iter().enumerate() { + let x = PVal::new(i, point.x); + xs.push(x); + xpoints.push(i); + } + }); + + s.spawn(|| { + for (i, point) in points.iter().enumerate() { + let y = PVal::new(i, point.y); + ys.push(y); + ypoints.push(i); + } + }); + }); let index = Self { - xpoints: Arc::new(xpoints.into()), - ypoints: Arc::new(ypoints.into()), + xpoints: Arc::new(RwLock::new(xpoints)), + ypoints: Arc::new(RwLock::new(ypoints)), xs: Arc::new(RwLock::new(xs)), ys: Arc::new(RwLock::new(ys)), };