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

Function treat_overflow

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

R*-tree overflow: forced reinsert first, then split on second overflow.

(tree: &mut RTree, node_idx: usize, reinserted_levels: &mut Vec<u32>)

Source from the content-addressed store, hash-verified

127
128/// R*-tree overflow: forced reinsert first, then split on second overflow.
129fn treat_overflow(tree: &mut RTree, node_idx: usize, reinserted_levels: &mut Vec<u32>) {
130 let level = tree.nodes[node_idx].level;
131 if node_idx != tree.root && !reinserted_levels.contains(&level) {
132 reinserted_levels.push(level);
133 let entries = forced_reinsert(tree, node_idx);
134 for entry in entries {
135 insert_entry(tree, entry, 0, reinserted_levels);
136 }
137 } else {
138 split_node(tree, node_idx);
139 }
140}
141
142/// Remove the farthest entries from node center and return for reinsertion.
143fn forced_reinsert(tree: &mut RTree, node_idx: usize) -> Vec<RTreeEntry> {

Callers 1

insert_entryFunction · 0.85

Calls 5

forced_reinsertFunction · 0.85
insert_entryFunction · 0.85
split_nodeFunction · 0.85
containsMethod · 0.45
pushMethod · 0.45

Tested by

no test coverage detected