pub struct RTree { /* private fields */ }Expand description
R*-tree spatial index.
Supports insert, delete, range search (bbox intersection), and incremental nearest-neighbor queries. Array-backed nodes for cache friendliness.
References:
- Beckmann et al., “The R*-tree” (1990)
- Hjaltason & Samet, “Distance Browsing in Spatial Databases” (1999)
Implementations§
Source§impl RTree
impl RTree
Sourcepub fn checkpoint_to_bytes(
&self,
kek: Option<&WalEncryptionKey>,
) -> Result<Vec<u8>, RTreeCheckpointError>
pub fn checkpoint_to_bytes( &self, kek: Option<&WalEncryptionKey>, ) -> Result<Vec<u8>, RTreeCheckpointError>
Serialize the R-tree to bytes for checkpointing.
When kek is Some, the inner rkyv payload is wrapped in an AES-256-GCM
encrypted SEGV envelope. When None, the raw rkyv bytes (with RKSPT\0
inner magic) are returned (existing plaintext format).
Sourcepub fn from_checkpoint(
bytes: &[u8],
kek: Option<&WalEncryptionKey>,
) -> Result<Self, RTreeCheckpointError>
pub fn from_checkpoint( bytes: &[u8], kek: Option<&WalEncryptionKey>, ) -> Result<Self, RTreeCheckpointError>
Restore an R-tree from checkpoint bytes.
kek controls the expected framing:
None→ file must be plaintext (starting withRKSPT\0). If it starts withSEGV, returnsErr(MissingKek).Some(key)→ encryption is required. If the file starts withSEGV, it is decrypted. If plaintext, returnsErr(KekRequired).
Source§impl RTree
impl RTree
Sourcepub fn bulk_load(entries: Vec<RTreeEntry>) -> Self
pub fn bulk_load(entries: Vec<RTreeEntry>) -> Self
Bulk load entries using Sort-Tile-Recursive packing.
More efficient than repeated single inserts for large datasets. Produces better packing (less overlap between nodes).
Sourcepub fn bulk_load_with_governor(
entries: Vec<RTreeEntry>,
governor: Arc<MemoryGovernor>,
) -> Self
pub fn bulk_load_with_governor( entries: Vec<RTreeEntry>, governor: Arc<MemoryGovernor>, ) -> Self
Bulk load with an optional governor for budget accounting.
The governor is stored on the returned tree and used for subsequent batch operations (full-scan, checkpoint serialization).
Source§impl RTree
impl RTree
pub fn new() -> Self
Sourcepub fn set_governor(&mut self, governor: Arc<MemoryGovernor>)
pub fn set_governor(&mut self, governor: Arc<MemoryGovernor>)
Inject a MemoryGovernor to enforce per-engine memory budgets on
large batch allocations (bulk load, full-scan serialization, range
search result collection). When not set, allocations proceed without
budget enforcement — correct for NodeDB-Lite and WASM builds.
pub fn len(&self) -> usize
pub fn is_empty(&self) -> bool
Sourcepub fn search(&self, query: &BoundingBox) -> Vec<&RTreeEntry>
pub fn search(&self, query: &BoundingBox) -> Vec<&RTreeEntry>
Range search: return all entries whose bbox intersects the query bbox.
Sourcepub fn search_owned(&self, query: &BoundingBox) -> Vec<RTreeEntry>
pub fn search_owned(&self, query: &BoundingBox) -> Vec<RTreeEntry>
Range search returning owned entries.
Sourcepub fn nearest(&self, query_lng: f64, query_lat: f64, k: usize) -> Vec<NnResult>
pub fn nearest(&self, query_lng: f64, query_lat: f64, k: usize) -> Vec<NnResult>
Nearest-neighbor search using incremental distance ordering.
Sourcepub fn entries(&self) -> Vec<&RTreeEntry>
pub fn entries(&self) -> Vec<&RTreeEntry>
Get all entries (for persistence serialization).
Trait Implementations§
Auto Trait Implementations§
impl Freeze for RTree
impl RefUnwindSafe for RTree
impl Send for RTree
impl Sync for RTree
impl Unpin for RTree
impl UnsafeUnpin for RTree
impl UnwindSafe for RTree
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.