use qutee::{AsPoint, Boundary, ConstCap, QuadTree};
use rand::{Rng, SeedableRng};
const ITEMS: usize = 1_000_000;
pub struct QuadTreeEntry {
x: usize,
y: usize,
_value: usize,
}
impl AsPoint<usize> for QuadTreeEntry {
fn as_point(&self) -> qutee::Point<usize> {
(self.x, self.y).into()
}
}
fn main() {
let data = parse_data();
let mut tree = QuadTree::new_with_const_cap(Boundary::between_points((0, 0), (32_767, 32_767)));
insert_data(&mut tree, data);
query_data(&mut tree, Boundary::new((32, 32), 10_000, 20_000));
}
fn parse_data() -> impl Iterator<Item = QuadTreeEntry> {
let mut rng = rand::rngs::StdRng::seed_from_u64(10);
(0..ITEMS)
.into_iter()
.map(move |i| (rng.gen_range(0..32_767), rng.gen_range(0..32_767), i))
.map(|(x, y, value)| QuadTreeEntry {
x,
y,
_value: value,
})
}
fn insert_data(
qt: &mut QuadTree<usize, QuadTreeEntry, ConstCap<16>>,
data: impl Iterator<Item = QuadTreeEntry>,
) {
data.for_each(|item| qt.insert(item).unwrap())
}
fn query_data(qt: &mut QuadTree<usize, QuadTreeEntry, ConstCap<16>>, area: Boundary<usize>) {
let _ = qt.query(area);
}