use super::NeighborPair;
use crate::CrossPair;
#[derive(Clone, Debug, Default, PartialEq)]
pub struct PairColumns {
pub first: Vec<u32>,
pub second: Vec<u32>,
pub distance: Vec<f32>,
}
impl PairColumns {
#[must_use]
pub fn from_pairs(pairs: &[NeighborPair]) -> Self {
let mut columns = Self {
first: Vec::with_capacity(pairs.len()),
second: Vec::with_capacity(pairs.len()),
distance: Vec::with_capacity(pairs.len()),
};
for pair in pairs {
columns.first.push(pair.first);
columns.second.push(pair.second);
columns.distance.push(pair.distance_squared.sqrt());
}
columns
}
#[must_use]
pub fn from_cross(pairs: &[CrossPair]) -> Self {
let mut columns = Self {
first: Vec::with_capacity(pairs.len()),
second: Vec::with_capacity(pairs.len()),
distance: Vec::with_capacity(pairs.len()),
};
for pair in pairs {
columns.first.push(pair.first);
columns.second.push(pair.second);
columns.distance.push(pair.distance_squared.sqrt());
}
columns
}
}