Free the entire tree rooted at `node`.
(&mut self, node: Node)
| 63 | |
| 64 | /// Free the entire tree rooted at `node`. |
| 65 | pub fn free_tree(&mut self, node: Node) { |
| 66 | if let NodeData::Inner { size, tree, .. } = self[node] { |
| 67 | // Note that we have to capture `tree` by value to avoid borrow checker trouble. |
| 68 | for i in 0..usize::from(size + 1) { |
| 69 | // Recursively free sub-trees. This recursion can never be deeper than `MAX_PATH`, |
| 70 | // and since most trees have less than a handful of nodes, it is worthwhile to |
| 71 | // avoid the heap allocation for an iterative tree traversal. |
| 72 | self.free_tree(tree[i]); |
| 73 | } |
| 74 | } |
| 75 | self.free_node(node); |
| 76 | } |
| 77 | } |
| 78 | |
| 79 | #[cfg(test)] |