in Rust/src/nodestore.rs [546:599]
fn grow_node_box_pair(
&self,
first: &mut BoundingBox,
second: &mut BoundingBox,
point_store: &dyn PointStore,
_node: usize,
sibling: usize,
) {
if self.is_leaf(sibling) {
if self.using_transforms {
let point =
&(self.project_to_tree)(point_store.get_copy(self.get_point_index(sibling)));
(*first).check_contains_and_add_point(point);
(*second).check_contains_and_add_point(point);
} else {
let point = point_store
.get_reference_and_offset(self.get_point_index(sibling))
.0;
(*first).check_contains_and_add_point(point);
(*second).check_contains_and_add_point(point);
}
} else {
let idx: usize = self.translate(sibling.into());
if idx != usize::MAX {
let dimensions = self.dimensions;
let base = 2 * idx * dimensions;
(*first)
.check_contains_and_add_point(&self.bounding_box_data[base..base + dimensions]);
(*second)
.check_contains_and_add_point(&self.bounding_box_data[base..base + dimensions]);
(*first).check_contains_and_add_point(
&self.bounding_box_data[base + dimensions..base + 2 * dimensions],
);
(*second).check_contains_and_add_point(
&self.bounding_box_data[base + dimensions..base + 2 * dimensions],
);
} else {
self.grow_node_box_pair(
first,
second,
point_store,
sibling,
self.get_left_index(sibling),
);
self.grow_node_box_pair(
first,
second,
point_store,
sibling,
self.get_right_index(sibling),
);
}
}
}