R*-tree overflow: forced reinsert first, then split on second overflow.
(tree: &mut RTree, node_idx: usize, reinserted_levels: &mut Vec<u32>)
| 127 | |
| 128 | /// R*-tree overflow: forced reinsert first, then split on second overflow. |
| 129 | fn 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. |
| 143 | fn forced_reinsert(tree: &mut RTree, node_idx: usize) -> Vec<RTreeEntry> { |
no test coverage detected