Skip to content
This repository was archived by the owner on Sep 9, 2025. It is now read-only.

Commit 45420c2

Browse files
author
Hendrik van Antwerpen
committed
Reduce elements added to shared appendages arena
1 parent f96de02 commit 45420c2

File tree

1 file changed

+19
-6
lines changed

1 file changed

+19
-6
lines changed

stack-graphs/src/cycles.rs

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -250,16 +250,18 @@ where
250250
};
251251

252252
let mut maybe_cyclic_path = None;
253-
let mut appendages = self.appendages;
253+
let mut remaining_appendages = self.appendages;
254+
let mut prefix_appendages = Vec::new();
254255
loop {
255-
// get prefix elements
256-
let mut prefix_appendages = List::empty();
256+
// find cycle length
257+
let mut counting_appendages = remaining_appendages;
258+
let mut cycle_length = 0usize;
257259
loop {
258-
let appendable = appendages.pop_front(&mut appendables.elements).cloned();
260+
let appendable = counting_appendages.pop_front(&mut appendables.elements);
259261
match appendable {
260262
Some(appendage) => {
263+
cycle_length += 1;
261264
let is_cycle = appendage.start_node(db, &appendables.interned) == end_node;
262-
prefix_appendages.push_front(&mut appendables.elements, appendage);
263265
if is_cycle {
264266
break;
265267
}
@@ -268,9 +270,20 @@ where
268270
}
269271
}
270272

273+
// collect prefix elements
274+
prefix_appendages.clear();
275+
prefix_appendages.reserve(cycle_length);
276+
for _ in 0..cycle_length {
277+
let appendable = remaining_appendages
278+
.pop_front(&mut appendables.elements)
279+
.expect("")
280+
.clone();
281+
prefix_appendages.push(appendable);
282+
}
283+
271284
// build prefix path -- prefix starts at end_node, because this is a cycle
272285
let mut prefix_path = PartialPath::from_node(graph, partials, end_node);
273-
while let Some(appendage) = prefix_appendages.pop_front(&mut appendables.elements) {
286+
while let Some(appendage) = prefix_appendages.pop() {
274287
appendage.append_to(
275288
graph,
276289
partials,

0 commit comments

Comments
 (0)