Skip to content

Commit 26e0039

Browse files
authored
Better optmization oportunity. (#75)
Now the recursion point is outside the `for` loop for handling a vec of subtrees.
1 parent eb25487 commit 26e0039

File tree

1 file changed

+11
-6
lines changed

1 file changed

+11
-6
lines changed

src/loader/flattening/mod.rs

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,9 @@ impl<T> From<Vec<Tree<T>>> for Tree<T> {
8181

8282
impl<T> Tree<T> {
8383
fn flatten(self) -> Vec<T> {
84-
fn flatten_rec<T>(dnode: Tree<T>, flat: &mut Vec<T>) {
85-
match dnode {
84+
#[inline]
85+
fn flatten_node<T>(node: Tree<T>, flat: &mut Vec<T>) {
86+
match node {
8687
Tree::Empty => {}
8788
Tree::Leaf(x) => {
8889
flat.push(x);
@@ -91,15 +92,19 @@ impl<T> Tree<T> {
9192
flat.extend(vec);
9293
}
9394
Tree::Node(children) => {
94-
for child in children {
95-
flatten_rec(child, flat);
96-
}
95+
flatten_vec(children, flat);
9796
}
9897
}
9998
}
10099

100+
fn flatten_vec<T>(nodes: Vec<Tree<T>>, flat: &mut Vec<T>) {
101+
for node in nodes {
102+
flatten_node(node, flat);
103+
}
104+
}
105+
101106
let mut flat = Vec::new();
102-
flatten_rec(self, &mut flat);
107+
flatten_node(self, &mut flat);
103108
flat
104109
}
105110
}

0 commit comments

Comments
 (0)