use crate::bounding_box::BoundingBox;
use crate::disk_rtree::rtree_types::{SpatialResult, NitriteIdValue};
pub trait NitriteRTree: Send + Sync {
fn add(&self, key: &BoundingBox, nitrite_id: NitriteIdValue) -> SpatialResult<()>;
fn remove(&self, key: &BoundingBox, nitrite_id: NitriteIdValue) -> SpatialResult<bool>;
fn find_intersecting_keys(&self, key: &BoundingBox) -> SpatialResult<Vec<NitriteIdValue>>;
fn find_contained_keys(&self, key: &BoundingBox) -> SpatialResult<Vec<NitriteIdValue>>;
fn find_nearest(
&self,
center_x: f64,
center_y: f64,
k: usize,
max_distance: Option<f64>,
) -> SpatialResult<Vec<(NitriteIdValue, f64)>>;
fn find_within_distance(
&self,
center_x: f64,
center_y: f64,
distance: f64,
) -> SpatialResult<Vec<(NitriteIdValue, f64)>> {
self.find_nearest(center_x, center_y, u64::MAX as usize, Some(distance))
}
fn size(&self) -> u64;
fn close(&self) -> SpatialResult<()>;
fn clear(&self) -> SpatialResult<()>;
fn drop_tree(&self) -> SpatialResult<()>;
}