kiddo 5.3.1

A high-performance, flexible, ergonomic k-d tree library. Ideal for geo- and astro- nearest-neighbour and k-nearest-neighbor queries
Documentation
// This example builds /examples/immutable-doctest-tree.rkyv, which is needed
// if you want to run the ArchivedImmutableTree doctests
use std::error::Error;
use std::fs::File;
use std::io::Write;

use kiddo::immutable::float::kdtree::{ImmutableKdTree, ImmutableKdTreeRK};
use rkyv::ser::serializers::{AlignedSerializer, BufferScratch, CompositeSerializer};
use rkyv::ser::Serializer;
use rkyv::{AlignedVec, Infallible};

const BUFFER_LEN: usize = 300_000;
const SCRATCH_LEN: usize = 300_000;

fn main() -> Result<(), Box<dyn Error>> {
    // build and serialize small tree for ArchivedImmutableKdTree doctests
    let content: Vec<[f64; 3]> = vec![[1.0, 2.0, 5.0], [2.0, 3.0, 6.0]];
    let tree: ImmutableKdTree<f64, u32, 3, 256> = ImmutableKdTree::new_from_slice(&content);

    let rk_tree: ImmutableKdTreeRK<f64, u32, 3, 256> = tree.into();

    let mut serialize_buffer = AlignedVec::with_capacity(BUFFER_LEN);
    let mut serialize_scratch = AlignedVec::with_capacity(SCRATCH_LEN);
    unsafe {
        serialize_scratch.set_len(SCRATCH_LEN);
    }
    serialize_buffer.clear();
    let mut serializer = CompositeSerializer::new(
        AlignedSerializer::new(&mut serialize_buffer),
        BufferScratch::new(&mut serialize_scratch),
        Infallible,
    );
    serializer
        .serialize_value(&rk_tree)
        .expect("Could not serialize with rkyv");

    let buf = serializer.into_serializer().into_inner();
    let mut file = File::create("./examples/immutable-doctest-tree.rkyv")?;
    file.write_all(buf)
        .expect("Could not write serialized rkyv to file");

    Ok(())
}