MCPcopy Create free account
hub / github.com/NodeDB-Lab/nodedb / choose_subtree

Function choose_subtree

nodedb-spatial/src/rtree/insert.rs:54–79  ·  view source on GitHub ↗

R*-tree ChooseSubtree: navigate to the best leaf for this entry.

(
    tree: &RTree,
    node_idx: usize,
    entry_bbox: &BoundingBox,
    target_level: u32,
)

Source from the content-addressed store, hash-verified

52
53/// R*-tree ChooseSubtree: navigate to the best leaf for this entry.
54fn choose_subtree(
55 tree: &RTree,
56 node_idx: usize,
57 entry_bbox: &BoundingBox,
58 target_level: u32,
59) -> usize {
60 let node = &tree.nodes[node_idx];
61 if node.level == target_level {
62 return node_idx;
63 }
64
65 match &node.kind {
66 NodeKind::Leaf { .. } => node_idx,
67 NodeKind::Internal { children } => {
68 if children.is_empty() {
69 return node_idx;
70 }
71 let best = if tree.nodes[children[0].node_idx].is_leaf() {
72 choose_least_overlap(children, entry_bbox)
73 } else {
74 choose_least_enlargement(children, entry_bbox)
75 };
76 choose_subtree(tree, children[best].node_idx, entry_bbox, target_level)
77 }
78 }
79}
80
81fn choose_least_enlargement(children: &[ChildRef], entry_bbox: &BoundingBox) -> usize {
82 let mut best = 0;

Callers 1

insert_entryFunction · 0.85

Calls 4

choose_least_overlapFunction · 0.85
choose_least_enlargementFunction · 0.85
is_leafMethod · 0.80
is_emptyMethod · 0.45

Tested by

no test coverage detected